docker - 如何将相同的卷应用于多个 docker compose 服务?

标签 docker docker-compose

假设有两个服务,它们定义了几个卷。但是这些卷中的大部分都用于两种服务:

version: '3'
services:
  service1:
    image: node:lts-alpine
    working_dir: /
    volumes:
      - ./package.json:/package.json
      - ./tsconfig.json:/tsconfig.json
      - ./packages:/packages
      - ./node_modules:/node_modules
      - ./services/service1:/services/service1
    command: yarn service1:start

  service2:
    image: node:lts-alpine
    working_dir: /
    volumes:
      - ./package.json:/package.json
      - ./tsconfig.json:/tsconfig.json
      - ./packages:/packages
      - ./node_modules:/node_modules
      - ./services/service2:/services/service2
    command: yarn service2:start

有没有办法防止这种重复?

我很想做这样的事情:
version: '3'
services:
  service1:
    image: node:lts-alpine
    working_dir: /
    volumes:
      - myVolumeList
      - ./services/service1:/services/service1
    command: yarn start

  service2:
    image: node:lts-alpine
    working_dir: /
    volumes:
      - myVolumeList
      - ./services/service2:/services/service2
    command: yarn start

myVolumeList:
  - ./package.json:/package.json
  - ./tsconfig.json:/tsconfig.json
  - ./packages:/packages
  - ./node_modules:/node_modules

编辑:我只使用 docker compose 进行本地开发。卷对我来说很棒,因为更改源代码文件会自动重新启动我的服务。因此复制文件一次是不够的

最佳答案

  • 在 native ,您可以执行以下操作:

  • 也许这可以解决您的问题。
    version: "3"
    
    services:
      srv1:
        image: someimage
        volumes:
          - data:/data
      srv2:
        image: someimage
        volumes:
          - data:/data
    
    volumes:
      data:
    
  • 有一个插件 - https://github.com/MatchbookLab/local-persist (使用前请阅读!)- 可让您更改卷挂载点。

  • 基本上,安装它:curl -fsSL https://raw.githubusercontent.com/MatchbookLab/local-persist/master/scripts/install.sh | sudo bash
    然后创建一个卷:docker volume create -d local-persist -o mountpoint=/data/images --name=images
    然后使用任意数量的容器:

    docker run -d -v images:/path/to/images/on/one/ one
    docker run -d -v images:/path/to/images/on/two/ two
    

    如果你想使用 docker-compose,有一个例子:

    version: '3'
    
    services:
      one:
        image: alpine
        working_dir: /one/
        command: sleep 600
        volumes:
          - data:/one/
    
      two:
        image: alpine
        working_dir: /two/
        command: sleep 600
        volumes:
          - data:/two/
    
    volumes:
      data:
        driver: local-persist
        driver_opts:
          mountpoint: /data/local-persist/data
    

    这里几乎是同样的问题:docker volume custom mount point
  • 这仅适用于 docker-compose 版本“2”:
  • version: '2'
    services:
    
      srv1:
        image: sometag
        volumes_from:
          - data
    
      srv2:
        image: sometag
        volumes_from:
          - data
    
      data:
        image: sometag
        volumes:
          - ./code-in-host:/code
    

    关于docker - 如何将相同的卷应用于多个 docker compose 服务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61547472/

    相关文章:

    docker - 错误 : for redis Cannot create container for service redis: source is not directory

    docker - docker-compose up 和 docker-compose start 有什么区别?

    docker - 如何在构建另一个容器期间填充 Mysql docker 容器?

    amazon-web-services - 如何在 EKS 集群中基于内存的指标实现自动缩放

    java - jetty worker 。使用基于主机 ID 的许可证运行软件

    docker - Portainer - 如何在 docker-compose.yml 中指定 SSL?

    docker - Docker:如何保存正在运行的实例?

    docker - 如何为docker-compose指定特定于站点的卷

    azure - 容器的 Web 应用程序 - Http 503

    Postgresql 在尝试使用音量时引发 'data directory has wrong ownership'