如果在未找到链接容器的情况下运行图像,可能会得到错误的行为和错误消息:
# 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。
答案 0 :(得分:1)
在这种情况下,是否允许docker尝试拉动
如果机器上不可用,则Docker将拉取图像。
无法在本地找到图片“ hello-world:latest”
此警告消息不是由于链接引起的,这是因为系统本地映像中不存在hello-world:latest
。因此如果运行docker run
,它将在本地运行,然后从远程运行(如果不存在)。
现在第一件事,最好是使用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文件脚本的正确性