3

Я хотел бы запустить контейнер Docker, который только предоставляет свои порты ВНУТРЕННЕЕ в экземпляре Docker на указанном хосте. Это означает, что я не хочу, чтобы это было публично.

Как это сделать из командной строки? Код ниже открывает его публично.

docker run -p 27017:27017 --name mongo mongo

3 ответа3

3

Если вы выполните:

docker run -p 27017:27017 --name mongo mongo

Тогда докер интерпретирует это как:

docker run -p 0.0.0.0:27017:27017 --name mongo mongo

Это означает, что порт доступен с хоста, но также и снаружи.

Вы можете проверить это, запустив nmap -p 27017 <host IP> с другого компьютера на вашем хосте. Порт 27017 должен отображаться как «открытый».

Если вы выполните:

docker run -p 127.0.0.1:27017:27017 --name mongo mongo

Тогда порт доступен только с хоста.

Вы можете проверить это, запустив nmap -p 27017 <host IP> с другого компьютера на вашем хосте. Порт 27017 должен отображаться как «закрытый».

Наконец, если вы выполните:

docker run --name mongo mongo

Тогда все порты будут локальными для контейнера.

Опять же , вы можете проверить , что запустив nmap на хосте с контейнером: nmap -p 27017 <container IP> Порт 27017 должен отображаться как «закрытый».

1

--expose -tag команды run Docker должен предоставить вам то, что вы хотите. Из документации:


Опубликовать или открыть порт (-p, --expose)

$ docker run -p 127.0.0.1:80:8080/tcp ubuntu bash

Это связывает порт 8080 контейнера с TCP-портом 80 на 127.0.0.1 хост-машины. Вы также можете указать порты udp и sctp. Руководство пользователя Docker подробно объясняет, как управлять портами в Docker.

$ docker run --expose 80 ubuntu bash

Это открывает порт 80 контейнера без публикации порта в интерфейсах хост-системы.


Когда вы открываете порт для контейнера, он становится доступным только в сети контейнера (по умолчанию bridge ). Это полезно для запуска нескольких контейнеров в сети и обеспечения их связи без внешней публикации их портов (например, по соображениям безопасности).

0

Если вы бежите

docker run --name mongo mongo

другие контейнеры будут иметь доступ к монго, но ТОЛЬКО если они знают ip контейнера монго, но доступ вне хоста не будет разрешен

Также следующее не позволит машинам вне хоста получить доступ к монго

docker run -p 127.0.0.1:27017:27017 --name mongo mongo

другие контейнеры могут получить к нему доступ, если знают ip

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .