如何使用docker-compose初始化多个容器共享的命名卷

5
我是一名有用的助手,可以为您翻译文本。
我正在尝试使用docker-compose构建自己的wordpress-nginx-php_fpm堆栈,但在命名卷及其初始化方面遇到了问题。
这是我的docker-compose.yml文件:
version: '2'
services:

  db: #https://hub.docker.com/_/mysql/
    image: mysql                                                                       
    restart: always
    volumes:
      - "wp-db:/var/lib/mysql:rw"
      - env_file:
      - "./conf/db/mysql.env"
    networks:
      - back                                                                          

  nginx: #https://hub.docker.com/_/nginx/
    image: nginx
    restart: always
    volumes:
      - "wp-files:/usr/share/nginx/html"
      - "./conf/nginx:/nginx:ro"
      - "./conf/tools:/tools:ro"
    networks:
      - front
      - back
    ports:
      - "8080:80"
    environment:
      - "PHP_FPM_HOST=php-wp:9000"
      - "PHP_FPM_ROOT_DIR=/var/www/html"
    command: "bash /tools/wait-for-it.sh php-wp:9000 -t 30 -- bash /tools/detemplatize-it.sh /nginx/nginx.template:/nginx.conf -- nginx -c /nginx.conf"

  php-wp: #https://hub.docker.com/_/wordpress/
    image: "wordpress:fpm"
    restart: always
    volumes:
      - "wp-files:/var/www/html"
      - "./conf/tools:/tools:ro"
    env_file:
      - "conf/wp/wordpress.env"
    networks:
      - back
    command: "bash /tools/wait-for-it.sh db:3306 -t 30 -- php-fpm -F"

networks:
  front: {}
  back: {}

volumes:
  wp-files: {}
  wp-db: {}

如您所见,我有两个命名卷。 "wp-db" 没有问题,因为它仅与 "db" 服务一起使用。
我的问题出在 "wp-files" 卷上,因为它被挂载在两个服务(=容器)中。
- 哪个服务将首先将其数据复制到命名卷中? - 第二个容器是否会覆盖第一个容器放置的数据? - 如何在某处“初始化”命名卷并仅在其挂载的 2 个容器(之后)中使用它?我听说过一个“nocopy”标志。 - 我是否必须使用其他东西(如数据容器)而不是命名卷?
谢谢。 注意:(所有内容都在同一物理主机上)
1个回答

2
这是我找到的答案:
哪个服务将首先将其数据复制到命名卷中?
第一个启动的容器(由于volumes-from,depends-on等)。
第二个容器会覆盖第一个容器放置的数据吗?
不会,一旦命名卷已被“初始化”(表示不再为空),它将覆盖每个挂载点,其中它连接到。
如何在某个地方“初始化”命名卷并仅在2个容器之后使用它?我听说有一个“nocopy”标志。
确实有一个“nocopy”标志,比如在“docker run”文档中,但似乎无法与其他标志(“ro”或“rw”)一起使用。
我是否必须使用其他东西(如数据容器)而不是命名卷?
因此,不需要。

1
你可以使用'nocopy'与其他标志(如“ro”和“rw”)一起使用,但你必须使用“,”而不是“:”来分隔它们。例如,'tesstvol:/test:ro,nocopy'。 - Andy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接