Не могу получить доступ к опубликованному порту на службе на моей хост-машине - PullRequest
0 голосов
/ 09 ноября 2018

Демон docker работает на машине с Ubuntu. Я пытаюсь запустить ансамбль зоопарка в рой. Сами узлы зоопарка могут общаться друг с другом. Однако с хост-компьютера я не могу получить доступ к опубликованным портам.

Если я начну контейнер с -

docker run \ -p 2181:2181 \ --env ZOO_MY_ID=1 \ --env ZOO_SERVERS="server.1=0.0.0.0:2888:3888 server.2=zoo2:2888:3888 server.3=zoo3:2888:3888" \ zookeeper

Это работает как шарм. На моей хост-машине я могу сказать echo conf | nc localhost 2181, а zookeeper что-то ответит.

Однако, если я это сделаю,

docker service create \ -p 2181:2181 \ --env ZOO_MY_ID=1 \ --env ZOO_SERVERS="server.1=0.0.0.0:2888:3888 server.2=zoo2:2888:3888 server.3=zoo3:2888:3888" \ zookeeper

и выполните ту же команду echo conf | nc localhost 2181, это просто застревает. Я даже не получаю новое приглашение на моем терминале.

Это работает так же, как и ожидалось на Docker Playground на официальной странице Zookeeper Docker Hub. Так что я ожидаю, что это должно быть и для меня.

Но ... Если я docker exec -it $container sh и затем попробую команду там, она снова заработает. Разве опубликованные порты не должны быть доступны даже для хоста для службы?

Есть ли какой-то трюк, который мне не хватает при работе с оверлейными сетями?

1 Ответ

0 голосов
/ 09 ноября 2018

Попробуйте использовать docket service create --publish 2181:2181 вместо этого.

Я считаю, что контейнер, поддерживающий службу, не доступен напрямую и должен проходить через сеть Swarm.

В противном случае, проверьте сервис, чтобы проверить, какой порт опубликован: docker service inspect <service_name>

Источник: Документация

...