当前位置: 首页 > 知识库问答 >
问题:

在单独的docker组合文件之间共享卷

柴琦
2023-03-14

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

若要在使用docker compose创建的容器之间共享卷,请执行以下操作:

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 compose文件在一个单独的文件中,也在一个完全不同的文件夹中。换句话说,Docker compose up命令将单独运行。我尝试了以下方法:

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
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容器静态文件卷改为如下所示:

- /var/lib/docker/volumes/directory_static-files/_data:/static/teststaticfiles

上面的方法是正确的,但是它看起来是“刺耳的”和脆弱的。是否有另一种方法可以在存储在不同组合文件中的容器之间共享卷,而不需要映射/var/lib/docker/volumes目录。

共有1个答案

丁德义
2023-03-14

通过将2个docker-compose.yml文件分开,实际上创建了2个不同的卷;这就是您在nginx服务卷中看不到web服务数据的原因,因为只有两个不同的卷。

例句:假设你有以下结构:

example/
    |- web/
        |- docker-compose.yml # your first docker compose file
    |- nginx/
        |- docker-compose.yml # your second docker compose file

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

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

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

volumes:
  static-files:
    external:
      name: web_static-files

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

docker-compose \
    -f web/docker-compose.yml \
    -p abcd \
    up

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

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

version: '3.6'

volumes:
  static-files:

并在web和nginxdocker-compose.yml文件中引用此卷作为外部卷,名称为volumes_static-files:

volumes:
  volumes_static-files:
    external: true
 类似资料:
  • 问题内容: 嗨,我正在使用Docker部署一些服务,在这里我想在不同的Docker容器之间共享Docker卷。 假设我有一个Docker容器A在/ data挂载了一个卷。这是A的Dockerfile 据我了解,这会将一个卷附加到容器,但不会将主机目录装载到该容器。因此,该卷内的数据仍位于容器A内。 我有另一个提供ftp服务的容器B。它访问卷/ public下的数据。B的Dockerfile是 现在

  • 我正在使用Docker部署一些服务,我想在不同的容器之间共享Docker卷。 假设我有一个Docker容器a,它在/data处挂载了一个卷。下面是它的DockerFile: 根据我的理解,这会将卷附加到容器,但不会将主机目录挂载到容器。所以这个卷里面的数据仍然在容器A里面。

  • 问题内容: 我正在开发使用Meteor和React作为视图引擎的应用程序 考虑下图: 从另一个示例反应隐藏组件 当触发C4按钮单击事件时,我需要更改C2组件状态。由于他们没有直接关系,因此我无法直接从C4进入C2状态。 另一个示例是从Component提交表单并获取在另一个Component中声明的数据(输入字段的值)。 我知道可以通过一些技巧来解决此问题(例如,流星会话,通过每个组件传递数据,基

  • 问题内容: 我需要在两个(或更多个)组合框之间共享数据,但是我想独立选择元素。例如,如果我在第一个comboBox中选择Object1,则我的第二个ComboBox也选择Object1,因为它们具有相同的模型(DefaultComboBoxModel,并且此模型还管理所选的对象)。但是我不想要这种行为。我想在我的comboBoxes中独立选择对象。当我在第一个comboBox中选择对象时,我的第二

  • null 在列出的3个选项中,只有最后一个可以使用projectile(可能还有其他Emacs包)。但我需要能够访问/修改文件从Windows以及,所以这不是一个可行的选择。 有没有人为此找到好的解决方案?

  • Windows版本和内部版本2004(操作系统内部版本19037.1) windows上安装的docker 运行诸如,,,等命令都可以正常工作。现在我想推一个图像,所以当然我必须先登录。 我在WSL终端中运行