conectando do contêiner do docker ao host do docker

10

Eu tenho uma configuração onde executo todas as partes do meu site em contêineres do Docker. Meu nginx que escuta na porta 80 e 443 é executado em um contêiner.

363292a98545        scivm/nginx-django-scivmcom:latest   /usr/bin/supervisord   12 days ago         Ghost               0.0.0.0:40001->22/tcp, 88.198.57.112:443->443/tcp, 88.198.57.112:80->80/tcp     lonely_feynmann           

Eu quero configurar um proxy para um serviço em outro contêiner. Este contêiner está ligado à porta 3000 no host:

b38c8ef72d0a        mazzolino/strider-dind:latest        wrapdocker /usr/bin/   41 minutes ago      Up 41 minutes       0.0.0.0:3000->3000/tcp, 22/tcp, 27017/tcp                                       distracted_einstein      

Meus iptables no host do docker se parecem com isso:

root@Ubuntu-1204-precise-64-minimal /var/run # iptables -L
Chain INPUT (policy ACCEPT) target     prot opt source               destination         
ACCEPT     all  --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere             ctstate RELATED,ESTABLISHED
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:ssh
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:http
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:https
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:8000
DROP       all  --  anywhere             anywhere            

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere             ctstate RELATED,ESTABLISHED

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

De dentro do container, não consigo me conectar à porta 3000 na máquina host devido à configuração do iptables.

Eu não quero abrir a porta 3000 para a Internet pública.

Existe uma maneira de abrir uma ponte direta entre o contêiner e o host na porta 3000?

Ou devo modificar meus iptables para aceitar do intervalo de ip do docker?

    
por user3133475 24.12.2013 / 23:25

2 respostas

5

Tudo o que você precisa são os recursos de link do Docker.

Apenas se livre de todas as coisas complicadas que você tentou fazer e comece a usar contêineres nomeados e, em seguida, vincule-os um ao outro.

    
por 24.12.2013 / 23:49
1

A resposta de Elias está correta, mas o link é longo e confuso. Aqui está um resumo simples:

Primeiro, execute o contêiner para vinculá-lo e nomeá-lo:

sudo docker run -d --name db training/postgres

Em seguida, execute o outro contêiner, vinculando-o ao primeiro contêiner:

sudo docker run -d -P --name web --link db:db training/webapp python app.py

O link do primeiro contêiner para o segundo contêiner é colocado em /etc/hosts . Então você pode usá-lo como um nome de host. Por exemplo:

sudo docker run --name web --link db:db training/webapp ping db
    
por 24.11.2014 / 16:58