首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在不同的码头组合文件之间共享卷

在不同的码头组合文件之间共享卷
EN

Stack Overflow用户
提问于 2019-01-05 10:37:27
回答 1查看 10.3K关注 0票数 22

我试图允许nginx在多个容器之间进行代理,同时也从这些容器访问静态文件。

若要在使用docker组合创建的容器之间共享卷,以下操作正确:

代码语言:javascript
复制
version: '3.6'

services:
  web:
    build:
      context: .
      dockerfile: ./Dockerfile
    image: webtest
    command: ./start.sh
    volumes:
      - .:/code
      - static-files:/static/teststaticfiles

  nginx:
    image: nginx:1.15.8-alpine
    ports:
      - "80:80"
    volumes:
      - ./nginx-config:/etc/nginx/conf.d
      - static-files:/static/teststaticfiles
    depends_on:
      - web

volumes:
  static-files:

然而,我实际上需要的是nginx组合文件在一个单独的文件中,并且也位于一个完全不同的文件夹中。换句话说,docker compose up命令将单独运行。我尝试了以下几点:

第一份撰写文件:

代码语言:javascript
复制
version: '3.6'

services:
  web:
    build:
      context: .
      dockerfile: ./Dockerfile
    image: webtest
    command: ./start.sh
    volumes:
      - .:/code
      - static-files:/static/teststaticfiles
    networks:
      - directorylocation-nginx_mynetwork

volumes:
  static-files:

networks:
  directorylocation-nginx_mynetwork:
    external: true

第二组文件(即: nginx):

代码语言:javascript
复制
version: '3.6'

services:
  nginx:
    image: nginx:1.15.8-alpine
    ports:
      - "80:80"
    volumes:
      - ./nginx-config:/etc/nginx/conf.d
      - static-files:/static/teststaticfiles
    networks:
      - mynetwork

volumes:
  static-files:

networks:
  mynetwork:

以上两个文件在可以查看站点的意义上正确工作。问题是,静态文件在nginx容器中不可用。因此,该网站显示没有任何图像等。

正确使用在这里发现的的一项工作是将nginx容器静态文件卷改为如下:

代码语言:javascript
复制
- /var/lib/docker/volumes/directory_static-files/_data:/static/teststaticfiles

上面的工作原理是正确的,但它似乎“无趣”和易碎。是否有另一种方法在存放在不同组合文件中的容器之间共享卷,而不需要映射/var/lib/docker/volumes目录。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-05 13:00:40

通过像在问题中那样分离两个docker-compose.yml文件,实际上创建了两个不同的卷;这就是为什么在nginx服务卷中没有看到来自web服务的数据的原因,因为只有两个不同的卷。

示例:假设您有以下结构:

代码语言:javascript
复制
example/
    |- web/
        |- docker-compose.yml # your first docker compose file
    |- nginx/
        |- docker-compose.yml # your second docker compose file

web_static-files文件夹运行docker-compose up (或从example目录运行docker-compose -f web/docker-compose.yml up )实际上将创建一个名为example的卷( docker-compose.yml文件中定义的卷的名称,以该文件所在的文件夹为前缀)。

因此,从nginx_static-files文件夹中运行docker-compose up实际上将创建nginx,而不是根据您的需要重用web_static-files

您可以使用web/docker-compose.yml创建的卷,方法是在第二个停靠器撰写文件(nginx/docker-compose.yml)中指定这是一个外部卷及其名称:

代码语言:javascript
复制
volumes:
  static-files:
    external:
      name: web_static-files

请注意,如果不希望卷(和所有资源)以文件夹名(默认)作为前缀,则可以将-p选项添加到docker-compose命令中:

代码语言:javascript
复制
docker-compose \
    -f web/docker-compose.yml \
    -p abcd \
    up

这个命令现在将创建一个名为abcd_static-files的卷(您可以在第二个停靠器撰写文件中使用该卷)。

您还可以在它自己的docker-compose文件(如volumes/docker-compose.yml)上定义卷创建:

代码语言:javascript
复制
version: '3.6'

volumes:
  static-files:

并在web和nginx docker-compose.yml文件中将此卷引用为外部卷(名为volumes_static-files ):

代码语言:javascript
复制
volumes:
  volumes_static-files:
    external: true

不幸的是,您无法在docker中设置卷名,它将自动前缀。如果这确实是一个问题,您还可以在运行任何docker volume create static-files命令之前手动创建卷(我没有重新推荐此解决方案,因为它添加了一个手动步骤,如果您在另一个环境中重现部署,它会被遗忘)。

票数 41
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54051130

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档