Демон 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
и затем попробую команду там, она снова заработает.
Разве опубликованные порты не должны быть доступны даже для хоста для службы?
Есть ли какой-то трюк, который мне не хватает при работе с оверлейными сетями?