Docker EXPOSE порт только для хоста

100

Докер может открывать порт только для хоста, а не для внешнего мира.

Мне нужно запустить докер с базой данных mongo, и я хотел, чтобы он был доступен только с хоста, но мне нужно связать порт хоста 27017.

Возможно ли это, или единственно возможный способ - изменить определения брандмауэра?

Рубен
источник

Ответы:

142

Конечно, просто привяжите его localhost, например:

docker run -p 127.0.0.1:27017:27017

Также: ваш хост также может нормально общаться с каждым контейнером через свой IP-адрес. Используется docker inspect $IDдля получения дампа json (помимо прочего), содержащего сетевой IP.

ZeissS
источник
4
Это что-то вроде [1] docker run -p 27017: 27017 -v / var / lib / mongodb / master: / data mongo: storage_test / usr / bin / start-mongo [2] docker run -p 127.0.0.1: 27017: 27017 ...?
Рубен
17
Второй вариант привязывается к localhost, да. Первый делает порт общедоступным. Если вам не нужен статический порт, используйте 127.0.0.1::27017.
ZeissS 01
3
Это решение, похоже, не работает в режиме роя, см. Эту проблему с github
bsimpson53
1
эквивалентный docker-compose просто service-name: { ... ports: [ "127.0.0.1:27017:27017" ] }?
Groostav 02
1
В чем проблема в моем docker-compose, хотя он привязан только к localhost, но он общедоступен. stackoverflow.com/questions/50621936/…
Тара Прасад Гурунг