【问题标题】:How to initialize a named volume shared across several containers with docker-compose如何使用 docker-compose 初始化跨多个容器共享的命名卷
【发布时间】:2017-01-31 00:03:43
【问题描述】:

我正在尝试使用 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: {}

如您所见,我有 2 个命名卷。 “wp-db”没有问题,因为它只用于“db”服务。

我的问题在于“wp-files”卷,安装在 2 个服务中(=容器)

  • 哪个服务会先将其数据复制到指定卷?
  • 第二个容器会覆盖第一个容器放置的数据吗?
  • 如何在某处“初始化”命名卷,然后(在)安装它的 2 个容器后使用它?我听说有一个“nocopy”标志。
  • 我是否必须使用其他东西(如数据容器)而不是命名卷?

谢谢。 注意:(一切都在同一个物理主机上)

【问题讨论】:

    标签: php wordpress nginx docker-compose docker-volume


    【解决方案1】:

    这是我能找到的答案:

    哪个服务会先将其数据复制到命名卷?

    首先启动的容器(感谢volumes-from,depends-on,...)

    第二个容器会覆盖第一个容器的数据吗?

    不,一旦命名卷被“初始化”(意味着不再为空),它将覆盖它所连接的每个挂载点。

    如何在某处“初始化”命名卷并使用它(之后) 2个容器安装在哪里?我听说有一个“nocopy”标志。

    确实有一个“nocopy”标志,就像在“docker run”文档中一样,但似乎不适用于其他标志(“ro”或“rw”)。

    我是否必须使用其他东西(如数据容器)而不是命名 音量?

    因此,没有。

    【讨论】:

    • 您可以使用 'nocopy' 和其他标志,如“ro”和“rw”,但您必须用“,”而不是“:”来分隔它们。例如,'testsvol:/test:ro,nocopy'
    猜你喜欢
    • 2017-11-01
    • 2021-05-08
    • 1970-01-01
    • 2022-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多