A solicitação HTTPS falha no Docker = 1.10 com rede virtualizada

3

Eu tenho um problema que uma conexão HTTPS não pode ser estabelecida dentro de um contêiner Docker com a versão 1.10.3 ou 1.11.2.

Eu tentei com o apt-get, curl e wget e todos falham assim que uma conexão HTTPS deve ser estabelecida.

Por exemplo, o seguinte comando falha:

$ docker run -it ubuntu-curl curl -v https://www.google.com
[...]
* gnutls_handshake() failed: Error in the pull function.
* Closing connection 0

A imagem do Docker ubuntu-curl é baseada em ubuntu:latest , a única alteração foi apt-get update ; apt-get install curl .

Se eu usar HTTP em vez de HTTPs, isso funciona. Se eu emitir o mesmo comando do host, ele funcionará. Se eu iniciar o contêiner sem virtualização de rede (docker run --net="host" ), ele funcionará. Se eu fizer o downgrade do Docker (eu tentei o 1.6.2 e 1.9.1), ele também funciona.

Alguma dica do que poderia estar errado? Eu tentei com dois hosts, o Ubuntu 14 LTS e o CoreOS estável sem customização relevante - ambos executados dentro de um cluster OpenStack.

Iptables do host (embora eu não entenda porque o iptables deve bloquear apenas o tráfego HTTPs):

$ 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
    
por Tarnschaf 23.06.2016 / 11:23

1 resposta

4

Recebi uma solução da comunidade do Docker

A rede OpenStack parece usar valores menores de MTU e o Docker não infere as configurações de MTU da placa de rede do host desde 1.10 .

Para executar o daemon do docker com configurações de MTU personalizadas, você pode seguir esta postagem no blog , que diz:

$ cp /lib/systemd/system/docker.service /etc/systemd/system/docker.service

Edite uma linha no novo arquivo para ficar assim:

ExecStart=/usr/bin/docker daemon -H fd:// –mtu=1454

MTU de 1454 é o valor que parece ser comum com o OpenStack. Você pode procurar em seu host usando o ifconfig.

Finalmente reinicie o Docker:

$ sudo systemctl daemon-reload
$ sudo service docker restart
    
por 25.06.2016 / 14:20

Tags