草庐IT

docker 撰写 v3 : sharing bind-mounted volume between multiple containers with top-level volumes syntax

coder 2023-05-27 原文

使用 docker-compose synthax v2,我们能够做这样的事情:

version: '2'
services:
  app:
    image: tianon/true
    volumes:
      - ../app:/var/www/app
  nginx:
    image: nginx
    volumes_from:
      - app
  php:
    image: php
    volumes_from:
      - app

在 v3.2 中,volumes_from 现在是 invalid option。该文档全部用于使用新的顶级卷合成器,这是 allways better。 我在github上看过一些评论,人们提出的唯一解决方案是

version: '3.2'
services:
  nginx:
    image: nginx
    volumes:
      - app:/var/www/app
  php:
    image: php
    volumes:
      - app:/var/www/app
volumes:
  app:
    driver_opts:
      type: none
      device: ../app
      o: bind

这显然看起来更糟,甚至对我不起作用。它给了我一个错误:没有这样的文件或目录。那我还应该尝试什么?似乎我仍然可以使用 links 而不是顶级卷,但它被视为文档中的遗留选项。那么如何正确使用新语法呢?

编辑: 问题已被确定为可能重复,但我不同意。请参阅下面的评论以获取解释。

最佳答案

正如主题开始者已经提到的,根据 documentationvolumes_from 已从新的 docker-compose 语法中删除。支持在顶级键 volumes 中定义的命名卷。该文档还说明了 volumes 之间的区别。和 bind mounts ,其中之一是谁管理内容:

By contrast, when you use a volume, a new directory is created within Docker’s storage directory on the host machine, and Docker manages that directory’s contents.

如果是这种情况,那么将主机文件夹绑定(bind)到卷中并让它同时由主机的文件系统和 Docker 控制是没有意义的。

如果您仍想将同一个文件夹绑定(bind)到两个或多个容器中,您可以尝试以下操作:

version: '3.2'
services:
  nginx:
    image: nginx
    volumes:
      - type: bind
        source: ../app
        target: /var/www/app
  php:
    image: php
    volumes:
      - type: bind
        source: ../app
        target: /var/www/app

关于 docker 撰写 v3 : sharing bind-mounted volume between multiple containers with top-level volumes syntax,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44824761/

有关docker 撰写 v3 : sharing bind-mounted volume between multiple containers with top-level volumes syntax的更多相关文章

随机推荐