Encaminhar conexões do contêiner do docker na porta específica para a interface local no host

1

Estou tentando executar serviços em contêineres em um provedor de nuvem. Gostaria que os aplicativos em contêiner fossem autenticados com um servidor LDAP local, que está (atualmente) disponível por meio de um túnel SSH para a nuvem. O túnel está disponível na máquina host do docker em 127.0.0.1:6636 .

É possível fazer com que os contêineres acessem 127.0.0.1:6636 na máquina host, por exemplo, através de algum tipo de configuração de proxy ou iptables?

Posso fazer o túnel funcionar se eu definir GatewayPorts=yes no sshd_config do host e usar docker run --add-host para adicionar o docker0 IP do host em /etc/hosts no contêiner, mas isso significa que o túnel é disponível em todas as interfaces. Eu posso presumivelmente bloquear o acesso ao túnel para a interface docker0 , mas eu prefiro que o túnel estivesse apenas na interface de loopback.

Eu não quero usar --net=host , porque quero usar links de contêiner.

Cloud                    |
                         |
+------------------+     |      +--------+     +----------+
| Host      Tunnel |     |      | Tunnel |     |   Tunnel |
|                O-------------------------------O Target |
| +-----------+  | |     |      |  Host  |     +----------+
| | Container |--+ |     |      +--------+
| +-----------+    |     |
+------------------+     |      Premises
                         |
    
por Rory Hunter 28.07.2015 / 12:35

1 resposta

0

Você pode passar o IP da interface docker0 do seu host como uma variável de ambiente e conectar-se ao servidor LDAP. Por exemplo, no host:

$ ip addr show docker0
5: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default 
link/ether 00:00:00:00:00:00 brd ff:ff:ff:ff:ff:ff
inet 10.1.42.1/16 scope global docker0
   valid_lft forever preferred_lft forever
inet6 fe80::60e4:ffff:fe97:1308/64 scope link 
   valid_lft forever preferred_lft forever
$ DOCKERADDR=$(ip addr show docker0 | grep inet\ | awk '{print $2}' | cut -d/ -f1)
$ docker run -it -e DOCKERADDR=${DOCKERADDR} image 

No interior do contêiner, você pode se conectar a $ {DOCKERADDR}: 6636

note: no coreos você já tem essas variáveis em seu ambiente se você . /etc/environment : COREOS_PUBLIC_IPV4 e COREOS_PRIVATE_IPV4

    
por 30.07.2015 / 11:17