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

Docker Compose-在多个容器之间共享命名卷

百里京
2023-03-14

我想把它作为一个卷,然后从多个容器中引用该卷。卷配置引用只将data-volume:显示为命名卷,没有值,因此看起来不像上面那样。

services:

    nginx:
        build: ./nginx/
        ports:
            - 80:80
        links:
            - php
        volumes:
            - app-volume

    php:
        build: ./php/
        expose:
            - 9000
        volumes:
            - app-volume

volumes:
     app-volume: ./appdata:/appdata

这给了我:

错误:在文件“./docker-compose.yml”中,卷“app-volume”必须是映射,而不是字符串

显然,我知道我需要更改volumes键/值对,但我不确定如何更改它,以便在服务之间共享卷。

我还签出了volumes_from,但这实际上只允许从其他容器继承。我看到有人在另一个包含他们想要的映射的容器上使用volumes_from,但将command:true设置为容器从未实际运行,这在我看来就像是一个黑客。

我怎么能这么做?

注意,我确实有以下工作:

nginx:
    volumes:
        - ./appdata:/appdata
php:
    volumes:
        - ./appdata:/appdata

但这只是重复,我希望有一个命名的卷可以帮助我避免:-)

共有1个答案

柯国安
2023-03-14

已从版本docker-compose 3开始删除docker命名卷。

但是,您可以使用扩展字段来避免复制卷源,并防止以后出现错别字:

version: '3.5'

x-services-volume:
  &services-volume
  type: bind
  source: ./appdata
  target: /appdata

services:

    nginx:
        build: ./nginx/
        ports:
            - 80:80
        links:
            - php
        volumes: *services-volume

    php:
        build: ./php/
        expose:
            - 9000
        # Use same way as for nginx if target override not needed.
        volumes:
            - <<: *services-volume
            target: /opt/target-override

注意:该功能从3.4版文件格式开始可用。

 类似资料:
  • 问题内容: 我正在使用docker-compose和v3。我正在尝试在Docker中挂载卷: 我想将此作为卷,然后从多个容器中引用该卷。的卷配置参考仅示出了作为命名体积,用没有值,因此它不会像以上。 这给了我: 错误:在文件“ ./docker-compose.yml”中,卷“ app-volume”必须是映射而不是字符串。 显然,我知道我需要更改键/值对,但是我不确定 如何 更改它,以便可以在服

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

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

  • 我想将MySQL泊坞站容器用于在同一台服务器上运行的多个项目。 使用docker-compose v3文件,我只是在每个项目中具有相同的mysql容器配置,并且它们具有相同的: 第二个应用程序有一个类似的< code>docker-compose.yml文件,但是使用了< code>app2而不是< code>app1。 当运行 为 重新创建时,我收到一个错误: 如何在多个docker项目之间共享

  • 背景:我正在并行运行自动化测试。使用pom.xml中的分叉,多个浏览器在相同数量的线程中启动,即1个浏览器是1个线程。 中的下面插件创建了与线程(fork)计数相等数量的。 所有这些类都同时并行执行。因此,似乎每当我创建或时,每个线程都会创建自己的这些,因此跨多个线程共享变量的概念是不起作用的。 我只想让一个线程访问“准备测试数据”函数,并将<code>标志 我正在按照教程https://www.

  • 问题内容: 我想像这样在多个线程之间共享一个变量: 我想在主线程和帮助线程之间共享,这是我创建的两个不同的Java类。有什么办法吗?谢谢! 问题答案: 二者并可以参照包含该变量的类。 然后,可以使该变量为 volatile ,这意味着 对该变量的更改在两个线程中立即可见。 有关更多信息,请参见本文。 易变变量 共享已同步的可见性功能,但不共享原子性功能。这意味着线程将自动 查看volatile变量