【发布时间】:2018-04-01 10:45:56
【问题描述】:
我有一个类似下面的 docker-compose.yml:
networks:
smstake:
ipam:
config:
- subnet: 10.0.10.0/24
services:
app:
image: smstake:latest
ports:
- 8000:80
networks:
- smstake
depends_on:
- db
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.role == manager
我正在使用它在以 swarm 模式运行的节点中部署服务。
每次构建映像时,映像名称可能会根据用户传递的分支名称或用作映像标记的标记名而有所不同。我从詹金斯那里运行它。例如:smstake:
如何将图像名称动态添加到服务的图像参数中。由于 docker stack 不支持构建。我什至不能使用它。 我无法找出正确的方法。
我正在尝试使用 docker stack deploy -c docker-compose.yml stackname 进行部署
我的确切要求是:
- 在 jenkins 中有一个构建工作,它为我们构建映像。
- 如果标签或分支名称发生变化,图像名称会不同或发生变化
- 我们有一个构建作业,可以使用新创建的映像再次部署这些作业。
为新 TAG 创建新映像的原因是我可以回滚到以前构建的映像。
一些修改: 添加了要添加到 configuration.env 文件中的图像名称,该文件将在部署命令运行之前在部署作业中使用 echo 命令传递。比 docker-compose 看起来像下面
version: '3.4'
networks:
smstake:
services:
db:
image: mysql:5.7
networks:
- smstake
ports:
- "3306"
env_file:
- configuration.env
environment:
MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASSWORD}
MYSQL_DATABASE: ${DB_NAME}
MYSQL_USER: ${DB_USER}
MYSQL_PASSWORD: ${DB_PASSWORD}
volumes:
- mysql_data:/var/lib/mysql
deploy:
mode: replicated
replicas: 1
app:
env_file:
- configuration.env
image: ${SMSTAKE_VERSION}
ports:
- 8000:80
networks:
- smstake
depends_on:
- db
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.role == manager
volumes:
mysql_data:
为什么它没有从 configuration.env 文件中读取,我已经确认在那里设置了该键的正确值。错误信息
创建服务 smstake_app 无法创建服务 smstake_app:来自守护程序的错误响应:rpc 错误:代码 = InvalidArgument desc = ContainerSpec:必须提供图像参考 构建步骤“执行 shell”将构建标记为失败 完成:失败
【问题讨论】:
-
但是可以使用版本回滚,即image: smstake:12345678901234567890
-
@ConstantinGalbenu 我应该从哪里得到那个版本以及什么会流动
-
从 docker 仓库,你可以看到历史
标签: docker jenkins docker-compose docker-swarm docker-stack