我最近将我的docker从1.4更新到了1.5(带有包lxc_docker
)。
从那时起,docker daemon 就会发送如下错误(对于每个命令):
$ docker version
Client version: 1.5.0
Client API version: 1.17
Go version (client): go1.4.1
Git commit (client): a8a31ef
OS/Arch (client): linux/amd64
FATA[0000] Error response from daemon: 404 page not found
但如果我使用以前版本的客户端,我会得到很好的答案:
$ /usr/bin/docker-old version
Client version: 1.4.0
Client API version: 1.16
Go version (client): go1.3.3
Git commit (client): 4595d4f
OS/Arch (client): linux/amd64
Server version: 1.5.0
Server API version: 1.17
Go version (server): go1.4.1
Git commit (server): a8a31ef
似乎是代理设置(HTTP_PROXY
和HTTPS_PROXY
该服务器上使用了变量),我可以解决通过设置变量来解决问题NO_PROXY
:
$ export NO_PROXY="/var/run/docker.sock"
$ docker version
Client version: 1.5.0
Client API version: 1.17
Go version (client): go1.4.1
Git commit (client): a8a31ef
OS/Arch (client): linux/amd64
Server version: 1.5.0
Server API version: 1.17
Go version (server): go1.4.1
Git commit (server): a8a31ef
你知道这个问题出在哪里吗真的从何而来?又如何干净地解决这个问题?
答案1
这是 1.5 版的新功能,docker 的一名成员(Twitter 上的@icecrime)已证实了这一点。文档是最新的:https://github.com/docker/docker/pull/10192/files
所以你不必干净利落地解决它。这是在代理后使用 docker 的正确方法。
答案2
您知道这个问题究竟出在哪里吗?
问题在于,docker 不必要地(有人可能会认为是错误的)尝试使用代理(如果由HTTP_PROXY
或指定)HTTPS_PROXY
环境变量指定)来访问当地的unix 域套接字位于/var/run/docker.sock
。
以及如何彻底解决它?
这是固定的在 1.6.0 版本中,在这种情况下不尝试使用代理。因此,不再需要添加/var/run/docker.sock
到NO_PROXY
环境变量中。