2016-11-10 9 views
0

У нас есть изображения на докере, работающие в роевом режиме, и возникают проблемы с тем, чтобы один из них слушал извне.Docker swarm, прослушивание в контейнере, но не снаружи

Если я выполняю операцию в контейнере, я могу скрутить URL-адрес на 0.0.0.0:8080.

Когда я смотрю на сети на хосте я вижу один пакет застрял в Recv-Q для этого порта прослушивания (но не для других, которые работают правильно.

Глядя на правила NAT я на самом деле могу вьются 172.19. 0.2: 8084 на хосте докера (docker_gwbridge), но не на самом деле IP-докере-хоста (172.31.105.59).

Я пробовал несколько разных точек (7080, 8084, 8085), а также остановил докер, сделал rm -rf/var/lib/docker, а затем попробовал только запустить этот контейнер, но не повезло. Любые идеи о том, почему это не будет работать для этого одного изображения контейнера, но еще 5 работают нормально?

Docker Сервис

docker service create --with-registry-auth --replicas 1 --network myoverlay \ 
    --publish 8084:8080 \ 
    --name containerimage \ 
    docker.repo.net/containerimage 

сс -ltn

State  Recv-Q Send-Q            Local Address:Port                Peer Address:Port 

LISTEN  0  128             172.31.105.59:7946                   *:* 
LISTEN  0  128                *:ssh                   *:* 
LISTEN  0  128              127.0.0.1:smux                   *:* 
LISTEN  0  128             172.31.105.59:2377                   *:* 
LISTEN  0  128               :::webcache                  :::* 
LISTEN  0  128               :::tproxy                  :::* 
LISTEN  0  128               :::us-cli                  :::* 
LISTEN  0  128               :::us-srv                  :::* 
LISTEN  0  128               :::4243                   :::* 
LISTEN  1  128               :::8084                   :::* 
LISTEN  0  128               :::ssh                   :::* 
LISTEN  0  128               :::cslistener                 :::* 

Iptables -L -n -t нац

Chain PREROUTING (policy ACCEPT) 
target  prot opt source    destination 
DOCKER-INGRESS all -- 0.0.0.0/0   0.0.0.0/0   ADDRTYPE match dst-type LOCAL 
DOCKER  all -- 0.0.0.0/0   0.0.0.0/0   ADDRTYPE match dst-type LOCAL 

Chain INPUT (policy ACCEPT) 
target  prot opt source    destination 

Chain OUTPUT (policy ACCEPT) 
target  prot opt source    destination 
DOCKER-INGRESS all -- 0.0.0.0/0   0.0.0.0/0   ADDRTYPE match dst-type LOCAL 
DOCKER  all -- 0.0.0.0/0   !127.0.0.0/8   ADDRTYPE match dst-type LOCAL 

Chain POSTROUTING (policy ACCEPT) 
target  prot opt source    destination 
MASQUERADE all -- 172.19.0.0/16  0.0.0.0/0 
MASQUERADE all -- 0.0.0.0/0   0.0.0.0/0   ADDRTYPE match src-type LOCAL 
MASQUERADE all -- 172.17.0.0/16  0.0.0.0/0 
MASQUERADE all -- 172.18.0.0/16  0.0.0.0/0 

Chain DOCKER (2 references) 
target  prot opt source    destination 
RETURN  all -- 0.0.0.0/0   0.0.0.0/0 
RETURN  all -- 0.0.0.0/0   0.0.0.0/0 

Chain DOCKER-INGRESS (2 references) 
target  prot opt source    destination 
DNAT  tcp -- 0.0.0.0/0   0.0.0.0/0   tcp dpt:8084 to:172.19.0.2:8084 
DNAT  tcp -- 0.0.0.0/0   0.0.0.0/0   tcp dpt:9000 to:172.19.0.2:9000 
DNAT  tcp -- 0.0.0.0/0   0.0.0.0/0   tcp dpt:8083 to:172.19.0.2:8083 
DNAT  tcp -- 0.0.0.0/0   0.0.0.0/0   tcp dpt:8080 to:172.19.0.2:8080 
DNAT  tcp -- 0.0.0.0/0   0.0.0.0/0   tcp dpt:8081 to:172.19.0.2:8081 
DNAT  tcp -- 0.0.0.0/0   0.0.0.0/0   tcp dpt:8082 to:172.19.0.2:8082 
RETURN  all -- 0.0.0.0/0   0.0.0.0/0 

И. П. | Grep 172,19

inet 172.19.0.1/16 scope global docker_gwbridge 

И. П.

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 
     valid_lft forever preferred_lft forever 
    inet6 ::1/128 scope host 
     valid_lft forever preferred_lft forever 
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9001 qdisc pfifo_fast state UP qlen 1000 
    link/ether 12:d1:da:a7:1d:1a brd ff:ff:ff:ff:ff:ff 
    inet 172.31.105.59/24 brd 172.31.105.255 scope global dynamic eth0 
     valid_lft 3088sec preferred_lft 3088sec 
    inet6 fe80::10d1:daff:fea7:1d1a/64 scope link 
     valid_lft forever preferred_lft forever 
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN 
    link/ether 02:42:55:ae:ff:f5 brd ff:ff:ff:ff:ff:ff 
    inet 172.17.0.1/16 scope global docker0 
     valid_lft forever preferred_lft forever 
4: docker_gwbridge: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP 
    link/ether 02:42:ce:b5:27:49 brd ff:ff:ff:ff:ff:ff 
    inet 172.19.0.1/16 scope global docker_gwbridge 
     valid_lft forever preferred_lft forever 
    inet6 fe80::42:ceff:feb5:2749/64 scope link 
     valid_lft forever preferred_lft forever 
23: [email protected]: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker_gwbridge state UP 
    link/ether 92:58:81:03:25:20 brd ff:ff:ff:ff:ff:ff link-netnsid 1 
    inet6 fe80::9058:81ff:fe03:2520/64 scope link 
     valid_lft forever preferred_lft forever 
34: [email protected]: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker_gwbridge state UP 
    link/ether e2:a7:0f:d4:aa:1d brd ff:ff:ff:ff:ff:ff link-netnsid 4 
    inet6 fe80::e0a7:fff:fed4:aa1d/64 scope link 
     valid_lft forever preferred_lft forever 
40: [email protected]: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker_gwbridge state UP 
    link/ether e6:1a:87:a4:18:2a brd ff:ff:ff:ff:ff:ff link-netnsid 5 
    inet6 fe80::e41a:87ff:fea4:182a/64 scope link 
     valid_lft forever preferred_lft forever 
46: [email protected]: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker_gwbridge state UP 
    link/ether a2:5f:2c:98:10:42 brd ff:ff:ff:ff:ff:ff link-netnsid 6 
    inet6 fe80::a05f:2cff:fe98:1042/64 scope link 
     valid_lft forever preferred_lft forever 
58: [email protected]: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker_gwbridge state UP 
    link/ether ea:40:a2:68:d3:89 brd ff:ff:ff:ff:ff:ff link-netnsid 7 
    inet6 fe80::e840:a2ff:fe68:d389/64 scope link 
     valid_lft forever preferred_lft forever 
41596: [email protected]: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker_gwbridge state UP 
    link/ether fa:99:eb:48:be:b0 brd ff:ff:ff:ff:ff:ff link-netnsid 9 
    inet6 fe80::f899:ebff:fe48:beb0/64 scope link 
     valid_lft forever preferred_lft forever 
41612: [email protected]: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker_gwbridge state UP 
    link/ether b6:33:62:08:da:c4 brd ff:ff:ff:ff:ff:ff link-netnsid 3 
    inet6 fe80::b433:62ff:fe08:dac4/64 scope link 
     valid_lft forever preferred_lft forever 
+0

Просто, чтобы быть уверенным, когда вы пытаетесь получить доступ к контейнеру через свой внутренний IP, вы используете порт 8080, а не 8084? –

+0

Правильно, вот что мы получаем (сообщение auth ожидается) 'curl 0.0.0.0:8080/about Ресурс требует аутентификации, которая не была снабжена запросами' – tweeks200

+0

. Так что в основном это работает 'curl 172.19.0.2:8084/ about', и это не «завитка» 172.31.105.59: 8080/about' –

ответ

0

Ok так что это нормальное поведение вашего контейнера, отображение порта может использоваться только с хоста IP. Итак, если вы используете IP-адрес контейнера, вам нужно добраться до порта 8080 (настоящий порт приложения).

Из-за --publish вы использовали, порт 8080 вашего контейнера сопоставлен к порту 8084 на хосте IP

+0

Это то, что не работает. Если я попытаюсь получить доступ к 8084 на host eth0 IP, это не сработает, однако 8080 работает в контейнере. – tweeks200

 Смежные вопросы

  • Нет связанных вопросов^_^