Docker swarm: 'build' configuration in docker compose file ignored during stack deployment
我们创建了具有多个服务的docker compose文件。 这些服务的映像是在运行时使用" build"配置选项构建的。 相应的Dockerfile在各自的目录中给出。
样本Docker撰写文件...
1 2 3 4 5 6 7 8 9 10 11 | version: '3' services: db2server: build: ./db2server ports: -"50005:50000" command: ["db2start"] appruntime: build: ./appruntime depends_on: - db2server |
该docker compose文件可与
-
映像是在运行时中根据
db2server 和appruntime 目录中存在的Dockerfile构建的 - 这些映像被部署在主机中
但是,当我们尝试将其部署在Docker群中时,会引发以下错误...
docker stack deploy -c /home/docker/docker-compose.yml app
1 2 3 4 5 | 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文件中定义的这些服务(带有构建选项)。
简短的答案是,不能将
从文档:
Note: The
docker stack commandbuild option is ignored when deploying a stack in swarm mode with a (version 3) Compose file. Thedocker stack command accepts only pre-built images.
一种替代方法是在部署群集集群之前构建docker映像。
使用
如果仍然有人在其中,则可以通过设置image参数和build参数来标记compose中的构建图像,如在文档的build部分中所见。因此文件应如下所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 | version: '3' services: db2server: image: <your registry here>/db2server build: ./db2server ports: -"50005:50000" command: ["db2start"] appruntime: image: <your registry here>/appruntime build: ./appruntime depends_on: - db2server |
那么您可以执行以下操作:
1 2 3 | docker-compose build docker-compose push docker stack deploy -c /home/docker/docker-compose.yml app |
撰写文件可同时使用以下两个工具:
Swarm并非旨在为您构建图像。假定您在图像注册表中有图像。 Swarm中的多个节点不能彼此共享图像,因此注册表(可以是远程的,也可以在Swarm本身上运行)是它们全部可以确保提取相同的精确图像的唯一方法。
因此,典型示例是让Docker Hub根据代码提交自动构建映像,或者让您的CI / CD平台构建映像并推送到注册表。然后,您的