作者:张春雷11111 | 来源:互联网 | 2022-12-31 13:30
我们创建了一个包含多个服务的docker compose文件.这些服务的映像使用"build"配置选项在运行时构建.相应的Dockerfile在相应的目录中给出.
示例docker撰写文件...
version: '3'
services:
db2server:
build: ./db2server
ports:
- "50005:50000"
command: ["db2start"]
appruntime:
build: ./appruntime
depends_on:
- db2server
此docker compose文件与docker-compose
命令一起使用.
图像是在运行时根据db2server
&appruntime
目录中存在的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文件中部署这些服务(使用构建选项).
1> François Mat..:
简短的回答是,你不能使用build
命令docker stack deploy
.
来自文档:
注意:使用(版本3)Compose文件在swarm模式下部署堆栈时,将忽略该docker stack
命令build
选项.该docker stack
命令仅接受预先构建的图像.
另一种方法是在部署群集群集之前构建docker镜像.
使用该docker build
命令创建docker镜像; 将创建的图像推送到(公共或私人)docker registry
; 并在您的docker compose
文件中引用它.
2> vlizana..:
如果仍然有人在其中,则可以通过设置image参数和build参数来标记compose中的已构建图像,如docs的build部分所示。因此文件应如下所示:
version: '3'
services:
db2server:
image: /db2server
build: ./db2server
ports:
- "50005:50000"
command: ["db2start"]
appruntime:
image: /appruntime
build: ./appruntime
depends_on:
- db2server
那么您可以执行以下操作:
docker-compose build
docker-compose push
docker stack deploy -c /home/docker/docker-compose.yml app