docker stack deploy导致"没有这样的图像错误"

use*_*644 15 docker docker-compose docker-swarm docker-stack

我正在使用docker swarm并希望部署一个服务docker-compose.我的服务使用一个自定义映像,称为myuser/myrepo:mytag我成功部署到Docker-Hub到私有存储库.

我的docker-compose看起来像这样:

version: "3.3"

services:

  myservice:
    image: myuser/myrepo:mytag
    ports:
      - "8080:8080"
Run Code Online (Sandbox Code Playgroud)

在执行之前,我成功地将图像拉出: docker pull myuser/myrepo:mytag

当我跑步时,docker stack deploy -c docker-compose.yml myapp我总是收到错误:"No such image: myuser/myrepo:mytag".

有趣的是,仅运行相同的文件:( docker-compose up即没有swarm模式)一切正常,服务启动.

我真的不明白为什么会失败?我已经尝试过清理docker system prunedocker然后重新生成我的图像,但没有成功.

use*_*644 27

已经找到了解决方案.我的图像托管在私有存储库中.除了swarm管理器(我执行命令的地方),我还有一个正在运行的swarm worker.

当我运行docker stack deploy -c docker-compose.yml myappdocker时,将服务部署到工作节点(而不是我想到的管理器节点).在工作节点,docker没有凭据从私有存储库中提取映像.因此,要解决此问题,要么传递标志--with-registry-auth(将存储库的凭据推送到工作节点),要么确保将服务部署到存在映像的节点.

请参阅:https://docs.docker.com/engine/reference/commandline/deploy/

  • 你好,我使用“docker stack deploy --prune --with-registry-auth --resolve-image=always --compose-file docker-compose.yml stack_name”,我经常收到此错误。这是非常随机的,有时所有节点都获得图像,有时则没有。这已经让我发疯有一段时间了。您知道问题可能是什么吗?我也在使用私人注册表。 (6认同)

Cur*_*Sam 7

我想添加另一个导致相同结果(错误消息)的场景,这样人们就不会用头撞墙。

另一种可能性是您尝试使用不安全的注册表部署映像,但忘记daemon.json在拉取映像的服务器上进行编辑。

如果是这样的话,让这个答案作为一个提醒;并为您节省一些时间。