docker stack deploy结果"没有这样的图像错误"

时间:2017-11-24 09:29:12

标签: 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"

在执行之前,我使用: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 prune清理docker然后重新生成我的图像,但没有成功。

3 个答案:

答案 0 :(得分:19)

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

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

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

答案 1 :(得分:2)

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

另一种可能是您尝试使用 insecure registry 部署映像,但忘记在拉取映像的服务器上编辑 daemon.json

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

答案 2 :(得分:0)

在公司防火墙后面的Mac上,我遇到了类似的问题。

仅在直接连接到互联网后,我才能解决。

只需更新,当我使用VPN时,无需任何代理设置就可以访问Internet,并且可以使用docker run下载(泊坞窗)图像。只有docker-compose才有问题。

我确实尝试在虚拟机的resolv.conf中将名称服务器更改为8.8.8.8,但问题未解决。