如何在两个容器之间正确共享相同的主机卷?

时间:2017-10-10 18:42:46

标签: php docker docker-compose

由于当Docker Compose更改时,volumes_from消失了,因此组成文件版本我在如何在不同容器之间共享卷方面有点迷失。

请参阅下面的示例,其中PHP应用程序位于PHP-FPM容器中,Nginx位于第二个容器中。

version: '3.3'

services:
    php:
        build:
            context: ./docker/php7-fpm
            args:
                TIMEZONE: ${TIMEZONE}
        env_file: .env
        volumes:
          - shared-volume:/var/www
    nginx:
        build: ./docker/nginx
        ports:
            - 81:80
        depends_on:
            - php
        volumes:
          - shared-volume:/var/www
volumes:
  shared-volume:
    driver_opts:
      type: none
      device: ~/sources/websocket
      o: bind

为了使应用程序当然工作,Nginx必须以某种方式访问​​PHP文件,volumes_from帮助我们很多。现在该选项已经消失。

当我尝试命令docker-compose up时,它以以下消息结束:

  

错误:对于websocket_php_1无法为服务php创建容器:   使用选项装入音量时出错:type ='none'   device ='〜/ sources / websocket'o ='bind':没有这样的文件或目录

如何在两个容器之间正确共享相同的主机卷?

1 个答案:

答案 0 :(得分:1)

为什么不使用绑定挂载?这只是每个需要查看的源代码,对吗?我添加了:ro(只读)选项,假设没有发生代码生成。

services:
    php:
        build:
            context: ./docker/php7-fpm
            args:
                TIMEZONE: ${TIMEZONE}
        env_file: .env
        volumes:
            # User-relative path
            - ~/sources/websocket:/var/www:ro

    nginx:
        build: ./docker/nginx
        ports:
            - 81:80
        depends_on:
            - php
         volumes:
            # User-relative path
            - ~/sources/websocket:/var/www:ro