У меня есть докер-контейнер, работающий на моем хосте Linux в сети Docker Bridge по умолчанию. Контейнер может попасть в интернет. (wget -qO- google.com работает) ifconfig показывает ip 172.17.0.2. Мой ноутбук, который подключен к той же сети, что и мой сервер. Он может пропинговать мой сервер, и мой сервер может пропинговать мой ноутбук, а мой докер-контейнер может пропинговать мой ноутбук, но мой ноутбук не может пропинговать мой докер-контейнер. (Мой сервер может пропинговать мой контейнер тоже.) С помощью wireshark я обнаружил, что пинг Docker-контейнеров происходит с IP-адреса моего сервера.

Я прочитал, что Docker-контейнер подключается к Интернету с помощью маскарада при подключении через мостовой адаптер. (не знаю где) Я читал о маскараде:

«Существует небольшое предостережение, и это то, что функция маскарада почти всегда работает только в одном направлении, то есть маскированные хосты могут делать вызовы, но они не могут принимать или принимать сетевые подключения от удаленных хостов».

В этом предложении есть почти что, так что я не уверен, верно ли это для докера.

Итак, мой вопрос: могу ли я как-то инициировать соединение с моим док-контейнером (в моей текущей конфигурации) с моего ноутбука? Зачем?/Почему бы и нет?

Что для этого нужно? (Я знаю о -публиковать)

2 ответа2

0

По умолчанию контейнеры Docker подключаются к мостовой сети, работающей внутри хоста (представьте, что ваша локальная сеть похожа на WAN/ Internet, а сеть Docker создает как локальная сеть, а хост Docker - как маршрутизатор)

Вы можете выставить порты с помощью команды docker run -p которая создает правило NAT с IP-адреса хоста на IP-адрес контейнера (например, если вы настроили переадресацию портов на маршрутизаторе для доступа к устройству в вашей частной сети из Интернета)

Вы также можете настроить маршрутизацию на хосте, чтобы сеть моста Docker была напрямую доступна. Для этого вам нужно убедиться, что на хосте включена переадресация IP-адресов, вам нужно убедиться, что брандмауэр хоста Docker будет разрешать входящие соединения на IP-адрес контейнера, и вам необходимо настроить маршрутизацию в вашей сети (через настройки по умолчанию). шлюз) для маршрутизации сетевых IP-адресов моста Docker на IP-адрес хоста

Помимо этих опций, вы можете посмотреть другие способы настройки сети Docker, если официальная документация https://docs.docker.com/network/#scope-of-this-topic

В дополнение к этим методам вы также можете подключиться по SSH к хосту и создать SSH-туннель к контейнеру. Например, если хост Docker - 10.0.0.2, а контейнер имеет IP-адрес 172.17.0.1, и вы хотите, чтобы вы обращались к nginx через порт 8080, вы можете выполнить ssh -L 8080:172.17.0.1:8080 10.0.0.2 который перенаправит порт 8080 на машине, инициирующей соединение SSH к 8080 на контейнере

-1

Вы можете сделать свой контейнер в качестве SSH-сервера, а затем ssh в свой контейнер со своего ноутбука.

Для получения дополнительной информации о том, как это сделать, см. Dockerize SSH service.

Обновить

Для док-контейнера, насколько я знаю, у него просто есть два способа подключения к Интернету.

Одним из них является предоставление порта для хоста. Другой - через контроллер Ingress.

Если нет, все не могут подключиться к контейнеру из Интернета, кроме хоста контейнера.

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