Как добраться до контейнера docker с устройства, которое находится в той же сети, что и узел docker?

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

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

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

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

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

что для этого потребуется? (Я знаю о-публикуйте)

5
задан raldone01
источник

2 ответов

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

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

обновление

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

один-предоставить порт хосту. Другое через регулятор входа.

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

-1
отвечен Charles Xu - MSFT 2018-08-31 03:05:19
источник

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

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

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

помимо этих вариантов, вы можете посмотреть на другие способы настроить сетевые настройки, если официальной документации 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
отвечен nijave 2018-09-12 00:07:04
источник

Другие вопросы docker networking