expor porta contêiner do docker para eth0

2

Primeiro: alguém com 300 representantes pode criar uma tag para "estivador", por favor? TYVM

Estou executando um contêiner docker para elasticsearch com o seguinte comando:

docker run -d -i -t -p 9200: 9200 -p9300: 9300 elasticsearch: 0.90.5

Que lança corretamente e quando eu enrolo localhost: 9200 eu recebo a mensagem elasticsearch json hello world.

O que não consigo descobrir é como conseguir que as portas sejam expostas fora da caixa. O que estou tentando fazer é:

docker run -d -i -t -p 123.123.123.123:9200:9200 -p 123.123.123.123:9300:9300 elasticsearch: 0.90.5

onde 123.123.123.123 é o endereço IP eth0. Isso não parece funcionar.

Agora, minha pergunta: Como posso executar corretamente esse contêiner e expor essas portas para o mundo externo?

Aqui está o meu "ip addr" da caixa que é um vmware headless rodando o Ubuntu 12.04.

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000
    link/ether 00:52:56:93:78:f6 brd ff:ff:ff:ff:ff:ff
    inet 162.248.XXX.XXX/24 brd 162.248.XXX.255 scope global eth0
    inet6 XXX::250:ab00:fe89:78f6/64 scope link 
       valid_lft forever preferred_lft forever
3: lxcbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN 
    link/ether 72:44:60:e8:46:2a brd ff:ff:ff:ff:ff:ff
    inet 10.0.3.1/24 brd 10.0.3.255 scope global lxcbr0
    inet6 XXX::7080:60ff:fee8:462a/64 scope link 
       valid_lft forever preferred_lft forever
4: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP 
    link/ether ba:d6:67:1a:13:bc brd ff:ff:ff:ff:ff:ff
    inet 172.17.42.1/16 scope global docker0
    inet6 XXX::549c:ebff:fe7d:a22/64 scope link 
       valid_lft forever preferred_lft forever
210: vethgVxkby: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master docker0 state UP qlen 1000
    link/ether ba:d6:67:1a:13:bc brd ff:ff:ff:ff:ff:ff
    inet6 XXX::b8d6:67ff:fe1a:13bc/64 scope link 
       valid_lft forever preferred_lft forever
    
por Kevin 22.11.2013 / 06:48

2 respostas

1

O Docker pode suportar redes no futuro. Mas, por enquanto, você pode Pipework para gerenciar a rede do Docker assim (somente para Hosts).

sudo pipework br1 $(docker run -d -i -t elasticsearch:0.90.5) 192.168.2.1/24
sudo ip addr add 192.168.2.254/24 dev br1

Mas se você quiser que ele seja o endereço IP público x.x.x.x (onipresente):

pipework eth0 $(docker run -d -i -t elasticsearch:0.90.5) x.x.x.x
    
por 23.11.2013 / 05:06
0

Eu pensei que executá-lo como você fez no começo docker run -d -i -t -p 9200:9200 -p 9300:9300 elasticsearch:0.90.5 deveria funcionar. Talvez você também tenha um firewall interferindo?

Você pode tentar executar um servidor normal (idealmente o elasticsearch sem o docker, porque a configuração do elasticsearch também pode ser um problema) na porta 9200 ou qualquer outra coisa e verifique se você pode se conectar a ele? E quando isso estiver funcionando, acho que o comando original deve funcionar.

Talvez tente sudo ufw allow 9200 ou algo assim?

    
por 28.12.2013 / 02:40