我遇到了HTTPS连接无法从版本1.10.3或1.11.2的Docker容器内部build立的问题。
我尝试使用apt-get,curl和wget,并且一旦build立HTTPS连接,就会失败。
例如,以下命令失败:
$ docker run -it ubuntu-curl curl -v https://www.google.com [...] * gnutls_handshake() failed: Error in the pull function. * Closing connection 0
Docker镜像ubuntu-curl基于ubuntu:latest ,唯一的变化是apt-get update ; apt-get install curl apt-get update ; apt-get install curl 。
如果我使用HTTP而不是HTTP,它可以工作。 如果我从主机发出相同的命令,它的工作原理。 如果我启动容器没有networking虚拟化 (docker运行 – --net="host" ),它的工作原理。 如果我降级Docker(我试过1.6.2和1.9.1),它也可以。
任何提示可能是错误的? 我尝试了两台主机,Ubuntu 14 LTS和CoreOS stable,没有相关的定制 – 都运行在OpenStack集群中。
Iptables的主机(虽然我不明白为什么iptables应该只阻止HTTPstream量):
$ sudo iptables --list Chain INPUT (policy ACCEPT) target prot opt source destination Chain FORWARD (policy ACCEPT) target prot opt source destination DOCKER-ISOLATION all -- anywhere anywhere DOCKER all -- anywhere anywhere ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED ACCEPT all -- anywhere anywhere ACCEPT all -- anywhere anywhere Chain OUTPUT (policy ACCEPT) target prot opt source destination Chain DOCKER (1 references) target prot opt source destination ACCEPT tcp -- anywhere 172.17.0.2 tcp dpt:12345 Chain DOCKER-ISOLATION (1 references) target prot opt source destination RETURN all -- anywhere anywhere
我得到了Docker社区的解决scheme
OpenStacknetworking似乎使用较低的MTU值,并且从1.10开始 ,Docker不会推断来自主机网卡的MTU设置。
要使用自定义MTU设置运行docker守护进程,可以按照以下博客文章的说法:
$ cp /lib/systemd/system/docker.service /etc/systemd/system/docker.service
在新文件中编辑一行,如下所示:
ExecStart=/usr/bin/docker daemon -H fd:// –mtu=1454
1454的MTU是OpenStack似乎常见的值。 你可以在你的主机上使用ifconfig来查看它。
最后重启Docker:
$ sudo systemctl daemon-reload $ sudo service docker restart