У меня возникла проблема с невозможностью установить HTTPS-соединения из контейнера Docker с версией 1.10.3 или 1.11.2.
Я пробовал использовать apt-get, curl и wget, и все терпит неудачу, как только должно быть установлено 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
.
Если я использую HTTP вместо HTTP, он работает. Если я введу ту же команду с хоста, она сработает. Если я запустил контейнер без виртуализации сети (запуск докера --net="host"
), оно работает. Если я откатываю Docker (я пробовал 1.6.2 и 1.9.1), он тоже работает.
Любые намеки на то, что может быть не так? Я пробовал с двумя хостами, Ubuntu 14 LTS и стабильной CoreOS без соответствующей настройки - оба работают внутри кластера OpenStack.
Iptables хоста (хотя я бы не понял, почему iptables должен блокировать только HTTP-трафик):
$ 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
Мне дали решение Сообщество докеров
Сеть OpenStack, похоже, использует более низкие значения MTU, а Docker не выводит настройки MTU из сетевой карты хоста. с 1.10.
Чтобы запустить демон docker с пользовательскими настройками MTU, вы можете выполнить это сообщение в блоге, который говорит:
$ cp /lib/systemd/system/docker.service /etc/systemd/system/docker.service
Отредактируйте строку в новом файле, чтобы она выглядела так:
ExecStart=/usr/bin/docker daemon -H fd:// –mtu=1454
MTU 1454 - это значение, которое кажется общим для OpenStack. Вы можете найти его на своем хосте с помощью ifconfig.
Наконец перезапустите Docker:
$ sudo systemctl daemon-reload
$ sudo service docker restart