首页 文章

Docker swarm:在堆栈部署期间忽略docker compose文件中的'build'配置

提问于
浏览
3

我们已经创建了一个包含多个服务的docker compose文件 . 这些服务的映像使用“build”配置选项在运行时构建 . 相应的Dockerfile在相应的目录中给出 .

示例docker撰写文件...

version: '3'
services:
  db2server:
    build: ./db2server
    ports:
      - "50005:50000"
    command: ["db2start"]
  appruntime:
    build: ./appruntime
    depends_on:
     - db2server

此docker撰写文件与 docker-compose 命令一起使用 .

  • 图像是在运行时从 db2serverappruntime 目录中的Dockerfile构建的

  • 这些图像部署在主机中

但是当我们尝试在docker swarm中部署它时,会抛出以下错误......

docker stack deploy -c /home/docker/docker-compose.yml app

Ignoring unsupported options: build

Creating network app_default
Creating service app_db2server
failed to create service app_db2server: Error response from daemon: rpc error: code = InvalidArgument desc = ContainerSpec: image reference must be provided

看起来在docker swarm中的堆栈部署期间忽略了'build'配置选项 .

我们如何在docker swarm中的docker compose文件中部署这些服务(使用构建选项) .

2 回答

  • 6

    简而言之,您不能将 build 命令与 docker stack deploy 一起使用 .

    来自docs

    注意:使用(版本3)Compose文件在swarm模式下部署堆栈时,将忽略docker stack命令构建选项 . docker stack命令仅接受预先构建的图像 .

    另一种方法是在部署群集群集之前构建docker镜像 .

    使用docker build命令创建docker镜像;将创建的图像推送到(公共或私有) docker registry ;并在 docker compose 文件中引用它 .

  • 0

    撰写文件同时提供两种工具: docker-compose cli和 docker stack cli . "build"选项在 docker-compose 中起作用但被堆栈命令忽略,"deploy"选项在堆栈命令中起作用但 docker-compose 忽略 .

    Swarm不是为您构建图像而设计的 . 它假设您的图像在图像注册表中可用 . Swarm中的多个节点不能相互共享图像,因此注册表(远程或在Swarm本身上运行)是唯一可以确保它们可以拉出相同精确图像的方法 .

    因此,典型的例子是让Docker Hub根据代码提交自动构建您的图像,或让您的CI / CD平台构建图像并推送到注册表 . 然后你的 stack deploy 命令将从该注册表中提取正确的图像 .

相关问题