У меня есть докер-контейнер с опубликованным портом 3001. Я могу подключиться к докер-контейнеру, выполнив ping-запрос с хоста
$ netcat -vzn 0.0.0.0 3001
Connection to 0.0.0.0 3001 port [tcp/*] succeeded!
Но извне хоста я получаю отказ в соединении.
$ netcat -vzn 10.0.0.154 3001
netcat: connect to 10.0.0.154 port 3001 (tcp) failed: Connection refused
Docker-контейнер опубликовал порты:
PORTS
0.0.0.0:3001->3001/tcp, :::3001->3001/tcp
Брандмауэр хоста отключен.
Хост - это физический сервер, работающий в Ubuntu.
Контейнеры недоступны, даже если они запущены в сети хостов напрямую ...
docker run -it -d -network=host ...
Я прочитал всю документацию, и по каждой инструкции контейнеры ДОЛЖНЫ быть доступны через hostIp: порт с этой текущей настройкой. Я не уверен, что мне еще чего-то не хватает в инструкциях Docker, или что-то странное происходит с самой ОС Ubuntu Server, которая отказывается от этих подключений.
Есть идеи? Спасибо!
Итак, я понял, что происходит ...
Хотя на самом деле порты докеров были правильно открыты на хосте, приложение внутри контейнера, которое, как предполагается, слушает эти порты, заняло больше времени, чем я думал, чтобы запустить . Через некоторое время приложение внутри контейнера докеров, наконец, было запущено, и порты стали доступны извне хоста.
У меня точно такая же проблема, и я не уверен на 100%, но в Ubuntu все еще есть некоторые правила, которые могут блокировать порты, называемые iptables.
С ] nmap localhost
вы можете узнать, какие порты открыты.