docker - 通过 docker-compose 文件版本 "3"安装主机目录并重新使用数据卷

标签 docker docker-compose

我有 Docker 命令来创建一个容器,然后使用该容器的名称和 --volumes-from 来运行另一个容器,它工作正常 -

docker create -v /home/dev/docker/my/config:/home/myuser/4.0/config --name shared-config my/configurator:4.0.0

以上将从图像 my/configurator:4.0.0

创建一个名为 shared-config 的新容器

当尝试运行任何其他容器时(例如 my/oms:4.0.0),我可以使用 --volumes-from 简单地使用名为 shared-config 的容器中的卷强>

docker run --volumes-from shared-config -p 8083:8080 -d my/oms:4.0.0

使用--volumes-from,我们可以在任何需要它的容器中多次使用该卷。

到这里一切似乎都很好。

现在,我正在尝试使用文件格式版本“3”在 docker-compose 中执行上述操作,但无法理解创建数据卷后我将如何重新使用它.因为根据版本 3 中的 docker-compose 他们有 discontinued use of --volumes-from . 他们说——

To share a volume between services, define it using the top-level volumes option and reference it from each service that shares it using the service-level volumes option.

在上面的声明中,他们指的是命名卷,请引用 here .

但我只想挂载一个主机目录作为数据卷并重新使用该数据卷。我的问题是如何通过 docker-compose 文件版本“3”重用此数据量。 最简单的,对于我想通过 docker-compose 运行的每个服务,我可以在服务级别使用音量键

version: "3"
services:
  my-oms:
    image: my/oms:4.0.0
    ports:
      - "8083:8080"
    volumes:
      - /home/dev/docker/my/config:/home/myuser/4.0/config

但是如果我想在不同的服务中使用我的主机目录(/home/dev/docker/my/config)作为数据卷怎么办?我应该为每项服务提供卷 key ,还是实际上在 docker-compose 版本“3”中有更好的方法,我可以在其他服务中重新使用数据卷(我们如何使用 --volumes-from)。

有任何指示或建议或我遗漏的东西吗?

最佳答案

避免重复语法的最佳选择是使用 extends option 扩展您的 docker-compose.yml :

所以你可以有一个如下所示的 common-services.yml:

version: "3"
services:
  generic-vol:
    volumes:
      - /home/dev/docker/my/config:/home/myuser/4.0/config

然后您的 docker-compose.yml 会更新为如下所示:

version: "3"
services:
  my-oms:
    extends:
      file: common-services.yml
      service: generic-vol
    image: my/oms:4.0.0
    ports:
      - "8083:8080"

请注意,docker stack deploy -c docker-compose.yml 可能不支持所有这些选项,我在为我的项目使用变量和多个 docker-compose 文件时遇到了问题。解决方案是使用 docker-compose 将文件解析为堆栈部署可以与 docker-compose config >docker-compose.stack.yml 一起使用的文件,然后将该 yml 文件传递​​给您的堆栈部署。

第二种选择是利用 yml 语法本身的特性。它允许 anchor 和对这些 anchor 的引用。该语法如下所示:

version: "3"
services:
  my-oms:
    image: my/oms:4.0.0
    ports:
      - "8083:8080"
    volumes: &common-vol
      - /home/dev/docker/my/config:/home/myuser/4.0/config
  my-xyz:
    image: my/xyz:4.0.0
    ports:
      - "8888:8080"
    volumes: *common-vol

第一个 &common-vol 创建一个 anchor ,后面的 *common-vol 是对 yml 数据相同部分的引用。

关于docker - 通过 docker-compose 文件版本 "3"安装主机目录并重新使用数据卷,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42086925/

相关文章:

docker - 在运行时从主机引用 “env-file”中的env变量传递给docker镜像

docker - Openshift 命令以非零退出代码 : Error executing in Docker Container: 137 终止

user-interface - 私有(private) docker 注册表的用户界面

logging - 使用 awslogs 驱动程序时无法在 docker 主机上查看容器日志

mongodb - 容器启动时无法初始化MongoDB

git - "gcloud auth activate-service-account"和 "gcloud source repos clone"错误

docker - 自动启动多个现有依赖容器的最佳方法是什么?

docker - docker-compose up 的问题

docker - 如何将主机名添加到同一 docker 网络上的容器中?

docker - Mercure Docker 由于忽略 docker-compose 中的 JWT_KEY 而导致 JWT 签名无效