gpt4 book ai didi

Docker compose,使用相同镜像: first fails with "no such image",秒的两个服务正常运行

转载 作者:行者123 更新时间:2023-12-02 19:49:41 26 4
gpt4 key购买 nike

TL;DR :除了服务名称和发布的端口外,我的撰写文件中有两个几乎相同的服务。使用 docker stack deploy... 部署时,为什么第一个服务失败并没有这样的图像错误,而使用相同图像的第二个服务运行得很好?

完整 :我有一个 docker-compose 文件,其中包含两个 Apache Tomcat 服务从我的私有(private) git 存储库中提取相同的图像。我的 docker-compose.yml 中这两种服务的唯一区别是是服务的名称(*_dev vs. *_prod)和发布的端口。我使用带有 gitlab-ci.yml 的 Gitlab CI 在我的 swarm 上部署这个 docker-compose 文件。 .对于我的 docker-compose 在这个 gitlab-ci.yml 中的部署我使用两个命令:

...
script:
- docker pull $REGISTRY:$TAG
- docker stack deploy -c docker-commpose.yml webapp1 --with registry-auth
...

(我使用 docker pull [image] 命令将图像放在正确的节点上,因为我的 --with-registry-auth 无法正常工作,但这不是我目前的问题)。

现在奇怪的是,对于第一个服务,我获得了 No such image:错误并且服务停止,而对于第二个服务,一切似乎都运行得很好。两个服务都在同一个工作节点上。如果我 docker ps,这就是我得到的:
:~$ docker service ps webapp1_tomcat_dev
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
xxx1 webapp1_tomcat_dev.1 url/repo:tag worker1 node Shutdown Rejected 10 minutes ago "No such image: url/repo:tag@xxx…"
xxx2 \_ webapp1_tomcat_dev.1 url/repo:tag worker1 node Shutdown Rejected 10 minutes ago "No such image: url/repo:tag@xxx…"
:~$ docker service ps webapp1_tomcat_prod
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
xxx3 webapp1_tomcat_prod.1 url/repo:tag worker1 node Running Running 13 minutes ago

我用过 --no-trunc获取以查看 IMAGE*_prod 使用和 *_dev是相同的。
restart_policy在我的 docker-compose 中解释了为什么第一个服务在第二个服务启动三分钟后失败。这是我的 docker 撰写:
version: '3.2'

services:
tomcat_dev:
image: url/repo:tag
deploy:
restart_policy:
condition: on-failure
delay: 60s
window: 120s
max_attempts: 1
ports:
- "8282:8080"

tomcat_prod:
image: url/repo:tag
deploy:
restart_policy:
condition: on-failure
delay: 60s
window: 120s
max_attempts: 1
ports:
- "8283:8080"

为什么第一个服务失败并没有这样的图像错误?例如,是否不可能有两个使用相同图像的服务在同一个工作节点上工作?

(我不能简单地扩大一项服务,因为我需要将文件上传到生产和开发不同的 web 应用程序 - 例如 devprod 许可证 - 因此我需要两种不同的服务)

编辑:第二个服务有效,因为它是首先创建的:
$ docker stack deploy -c docker-compose.yml webapp1 --with-registry-auth
Creating service webapp1_tomcat_prod
Creating service webapp1_tomcat_dev

最佳答案

我找到了一种解决方法,方法是将我的服务分隔在两个不同的 docker compose 文件( docker-compose-prod.ymldocker-compose-dev.yml )并执行 docker stack deploy我的 gitlab-ci.yml 中的命令两次:

...
script:
- docker pull $REGISTRY:$TAG
- docker stack deploy -c docker-commpose-prod.yml webapp1 --with registry-auth
- docker pull $REGISTRY:$TAG
- docker stack deploy -c docker-commpose-dev.yml webapp1 --with registry-auth

...

我的直觉告诉我 restart_policy在我的 docker-compose 中也太严格了(有一个 max_attempts: 1 ),可能是由于这个原因,图像无法及时/在一次重启内使用(正如@Ludo21South 所建议的那样)。因此,我允许进行更多尝试,但由于我已经将服务分成了两个文件(已经工作),所以我没有检查这个假设是否正确。

关于Docker compose,使用相同镜像: first fails with "no such image",秒的两个服务正常运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61726779/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com