Rob*_*452 1 docker docker-swarm
我有一个带有使用最新标签的容器的 docker compose 文件:
code_site:
image: code_site:latest
deploy:
restart_policy:
condition: any
volumes:
- ../../data_to_backup/code_site/drupal_sites:/drupal_www/sites
- drupal_core:/drupal_www/core
- php_fpm_socket:/var/run/php-fpm7
networks:
- main_net
我有一个过程可以重建容器。当我想对我的网站进行更改时,我会使用它。
我正在调查 docker stack deploy 命令的问题:(
docker stack deploy --compose-file=docker-compose.yml code_site
堆栈名称恰好与图像名称匹配,但这是一个巧合。)
如果我经过以下过程: 删除 code_site:latest image (rmi code_site:latest) 重建一个新的 code_site:latest image 重新部署堆栈
它将调出容器的旧版本。这令人困惑,尤其是因为我删除了旧版本。
我更进一步,删除了 code_site 映像,然后运行了 stack deploy 命令。堆栈部署成功仍然运行旧版本的容器。
我可以使用 docker images 命令并验证没有名为 code_site:latest 的容器,所以我不知道堆栈可能如何部署。
任何人都可以解释图像是如何从死里复活的,我应该使用什么方法来永久摆脱它并强制 docker stack 使用真实图像?
谢谢罗伯特
code_site 是一个本地构建的映像,我在 swarm 上运行,但 swarm 中只有一个节点
Docker 堆栈部署将从您的 docker 注册表中提取最新的镜像,因为默认设置了“--resolve-image always”,因此始终解析为最新的镜像。如果你不想要这个运行
docker stack deploy --resolve-image never [rest of deploy command]
但是,为了更容易维护更改,我建议在您的注册表中为您的图像使用版本标签,例如 code_site:v1当代码更改推送新版本标记 code_site:v2并使用不带--resolve-image never.
此外,如果您计划将节点添加到您的 swarm 中,您将需要更改您的命令docker stack deploy --with-registry-auth以允许其他节点从您的存储库中提取图像。
如果您 100% 确定您的 docker 注册表中没有具有该名称的图像,code_site:latest那么
这应该有效
跑:
docker rm $(docker ps -aq)
docker volume rm $(docker volume ls --format {{.ID}})
Run Code Online (Sandbox Code Playgroud)
要检查延迟的容器/服务:
列出现有服务
docker service ls
Run Code Online (Sandbox Code Playgroud)
列出运行堆栈
docker stack ls
Run Code Online (Sandbox Code Playgroud)
列出 所有 容器
docker ps -aq
Run Code Online (Sandbox Code Playgroud)
然后使用部署命令重新部署
或者在不删除旧容器/卷/图像的情况下更新您的服务,您可以只更新您的图像,然后更新您的服务而不删除任何内容。
这将使用新映像更新您的服务...无需停止、删除、然后更新...只需更新。
构建新镜像后运行:
docker service update [SERVICE NAME] --image [IMAGE NAME] --force
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3819 次 |
| 最近记录: |