Docker swarm 有一些共享卷

标签 docker docker-compose docker-swarm

我将尝试描述我想要的功能:
我正在运行 docker swarm超过 docker-compose在 docker-compose 中,我有服务,为简单起见,我们称之为 A , B , C .

假设 C服务需要可以访问包含共享代码模块的服务 AB .

我的问题是:
1.是否每个需要访问共享卷的服务都必须挂载C服务到它自己的本地文件夹,(使用下面的卷部分)或者可以在不安装/复制到本地容器中的路径的情况下访问它。

  • 在 docker swarm 中,可以是 2 个服务实例 AB将驻留在计算机中 X , 而服务 C将驻留在计算机上 Y .
    是不是因为服务都维护在同一个docker下swarm stack ,他们将毫无问题地与服务进行通信 C .

  • 如果不是,它应该实现哪些定义?
    我的结构是这样的:
    version: "3.4"
    
    services:
      A:        
        build: .
        volumes:
          - C:/usr/src/C
        depends_on:
          - C
    
    
      B:
        build: .
        volumes:
          - C:/usr/src/C
    
        depends_on:
          - C
    
      C:
        image: repository.com/C:1.0.0
        volumes:
          - C:/shared_code
    
    volumes:
         C:
    

    最佳答案

    如果你分享的是代码,你应该将它构建到实际的 Docker 镜像中,而不是尝试为此使用卷。

    你会遇到两个大问题。一个是在多主机安装中正确共享卷。第二个是一个更长期的问题:如果共享代码发生变化,你会怎么做?您不能只使用共享代码重新部署 C 模块,因为保存代码的卷已经存在;您需要单独更新卷中的代码,重新启动依赖服务,并希望它们都能正常工作。实际上,将代码烘焙到图像中可以在尝试部署之前测试完整的设置。

    关于Docker swarm 有一些共享卷,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51268853/

    相关文章:

    docker - 快照和gitlab-CI : error: cannot communicate with server: Post http://localhost/v2/snaps/hello-world

    php - Docker 将 PHP 容器连接到 MySQL

    docker - 启动容器失败:\“10.255.0.0/16\”的子网沙箱连接失败

    docker - Docker-在容器启动时将覆盖对后缀main.cf文件的更改

    java - 如何为前端Web应用程序编写dockerfile

    Docker compose 在 mac 上抛出权限被拒绝的问题

    docker - 无法设置本地主机。这样可以防止创建GUID

    docker-compose - 使用网格和 DNSRR 的 Docker 群网络延迟

    ruby-on-rails - 将 gitlab ci 与 docker compose 结合使用使我留下了容器生成的文件夹 gitlab 无法删除

    git - 如何在使用git的同时构建docker-compose镜像?