docker compose 如何自动创建指定权限的 bind mount?

6 天前
 kyonn

下面格式的 docker-compose.yml 会在 docker-compose up -d 时自动在当前目录下创建 kkk 目录, 挂载到 container 内部作为 /app/data 使用. 有个问题是部分 docker image 对挂载的 volume 权限有要求, 比如设置 owner 为 www-data, 当然可以手动创建该目录, 并修改权限后执行 docker-compose up -d.

有没有一种办法能在 docker-compose up -d 执行时自动在主机上创建 kkk 文件夹并修改 kkk 目录权限? Dockerfile 好像是针对容器内部进行的操作?

包括有些 docker 使用时, 要求先在主机上手动创建数据库空文件, 这些有没有办法都写到 一种 标准的配置文件中. 因为不想直接去修改原始的 docker 镜像.

  xxxx:
    image: yyyy/zzzz:v7.2.2
    container_name: xxxx
    restart: always
    volumes:
      - ./kkk:/app/data
423 次点击
所在节点    Docker
6 条回复
BernieDu
6 天前
有点没听懂,你是觉得 Bind 对宿主机路径依赖性很强吗。如果是这样可以改为用 volume
xxxx:
image: yyyy/zzzz:v7.2.2
container_name: xxxx
restart: always
volumes:
- source: xxxx_data
target: /app/data
type: volume
volumes:
xxxx_data: {}
kyonn
6 天前
@BernieDu
不是, 就是要用 bind , 这样方便备份. 问题是 bind mount 的 host 目录, 由 docker 直接创建的默认权限是 root:root 的, 而有些 docker 不是以 root:root 运行的, 不能直接工作, 需要在 docker-compose up -d 前手动创建这个 host 目录, 并且修改这个目录权限.

问题是能不能把这个目录创建和自动设置主机 kkk 目录权限的事情放在 docker-compose.yml 或者 Dockerfile 之类的标准流程里一起做了. 这样迁移比较方便, 不容易忘了要改权限的事情.
Spoken6035
6 天前
建议写一个 bash 脚本
kyonn
6 天前
@Spoken6035 也是个办法.
heartleo
9 小时 45 分钟前
@kyonn docker-compose 可以指定 uid 和 gid 可以研究下
kyonn
6 小时 9 分钟前
@heartleo 这个指的是在容器中的运行权限, 我想改的是创建目录本身的权限. 因为现成的镜像制作时可能已经要求用某种权限运行了, 改 uid 和 gid 可能要重新处理镜像.

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1101532

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX