一、错误重现

PaaS应用平台项目的开发环境下,创建容器时总是失败,故debug获得命令并在后台执行,发现运行

docker -H tcp://192.168.206.131:5010 run  -d  -P -e DOCKER_HOST="192.168.206.131:5010" nginx.host:8080/nginx:1.8时报错,如下图:


二、错误原因分析

初看问题是由于72.54.4.91这个地址不通造成的,但ping 72.54.4.91是可以ping通的。其实最令我疑惑的是我指定了守护进程的地址和端口是192.168.206.131:5010,去pull镜像的时候地址竟然变为了72.54.4.91:8080。虽然百思不得其解,但问题还是要解决的,故Google之,但上面给出的答案五花八门,参差不齐,环境也不一样。看了那么多答案,得出一个结论就是:无论你是有问题需要发问,还是同样的问题你的方法奏效,都一定要讲自己的环境写清楚,方便大牛们帮助你解答,也方便初学者们对号入座跟着去解决问题,利人利己,何乐不为。行文至此,给出我的一套环境:CentOs7.1;仓库高可用方案(仓库1:192.168.206.130-registry主机和仓库2:192.168.206.131-swarm主机),nginx主机和swarm主机为同一主机192.168.206.131,nginx主机域名解析后为nginx.host,端口为8080;swarm集群中有192.168.206.130(registry主机)、192.168.206.131(swarm主机)和192.168.206.132(docker主机);要pull的镜像为centos。

三、解决办法

查看仓库中是否存在要pull的镜像


在swarm主机中做该项操作发现镜像存在。在docker主机中,进行curl


curl不成功,怀疑问题是在docker主机中没有进行域名解析,故直接curl nginx主机的IP和端口:curl http://192.168.206.131:8080/v1/search


直接curl nginx主机IP和端口可以查看仓库中的镜像,故问题在于docker主机中没有进行nginx主机的域名解析。vi /etc/hosts 增加一行:192.168.206.131 nginx.host

保存并退出。


再次curl,成功。


执行最初的命令:


成功。

总结:docker主机没有进行域名解析会出现上述错误还是心存疑惑,但好在问题解决了。后续学习中再做探究。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐