如果找不到链接的容器,则docker run结果为“无法找到图像”

时间:2019-09-16 10:26:45

标签: docker

如果在未找到链接容器的情况下运行图像,可能会得到错误的行为和错误消息:

# this works:
> docker run --rm -d --name natsserver nats
> docker run --rm -it --name hello-world --link natsserver hello-world

# now stop natsserver again...
> docker stop natsserver

当我使用相同的命令再次运行hello-world时,我不了解错误处理的第一部分-为何docker尝试拉动?

> docker run --rm -it --name hello-world --link natsserver hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
Digest: sha256:b8ba256769a0ac28dd126d584e0a2011cd2877f3f76e093a7ae560f2a5301c00
Status: Image is up to date for hello-world:latest
docker: Error response from daemon: could not get container for natsserver: No such container: natsserver.
See 'docker run --help'.

如果我尝试运行在本地构建的映像,情况会变得更糟:

> docker build -t nats-logger .
[...]
Successfully tagged nats-logger:latest

> docker run --rm -it --name nats-logger --link=natsserver nats-logger
Unable to find image 'nats-logger:latest' locally
docker: Error response from daemon: pull access denied for nats-logger, repository does not exist or may require 'docker login': denied: requested access to the resource is denied.
See 'docker run --help'.

所以我的问题是:

a)在这种情况下,是否允许docker 尝试拉,或者这是不良行为吗?

b)这真的是错误的错误消息,还是我错过了什么?

P.S .:我正在运行Docker 19.03.2版,在Windows 10上构建6a30dfc。

2 个答案:

答案 0 :(得分:1)

  

在这种情况下,是否允许docker尝试拉动

如果机器上不可用,则Docker将拉取图像。

  

无法在本地找到图片“ hello-world:latest”

此警告消息不是由于链接引起的,这是因为系统本地映像中不存在hello-world:latest。因此如果运行docker run,它将在本地运行,然后从远程运行(如果不存在)。

enter image description here

现在第一件事,最好是使用docker-compose而不是Legacy容器链接。

如果容器未运行,则无法链接该容器。使用natsserver验证容器docker ps,然后在其运行时进行链接。

docker run --rm -it --name hello-world --link natsserver:my_natserver_host hello-world

一旦您可以检查链接。

docker inspect hello-world | grep -A 1 Links

旧版容器链接

  

警告:--link flag是Docker的遗留功能。它可能   最终被删除。除非您绝对需要继续使用   我们建议您使用用户定义的网络来简化   两个容器之间的通信,而不是使用--link。一   用户定义的网络不支持您可以使用的功能   --link正在容器之间共享环境变量。但是,您可以使用其他机制(例如卷)共享环境   容器之间的变量以更可控的方式。

答案 1 :(得分:0)

  • 只需尝试“ docker登录”。

  • 检查您的映像名称是否存在于docker hub中

  • 并检查正确的docker build命令-> docker build -t image-name .

  • 查看Docker文件脚本的正确性