2015-09-30 5 views
0

Я только что начал экспериментировать с докером. На моем хосте Windows у меня есть виртуальная машина, которая содержит контейнер докеров. Я хочу иметь связь между хостом и контейнером или может быть другими виртуальными машинами и этим контейнером.Докер: Связь между физической машиной - VM -Docker container

  • Host IP является 192.168.2.10 с маской подсети 255.255.255.0
  • VM внутрибрюшинно является 192.168.254.130 с маской подсети 255.255.255.0
  • Контейнер получает IP-172.17.0.13

I видели несколько блогов о мостике, но я до сих пор не уверен в этом и как это сделать. Я не очень люблю работу в сети.

Небольшое руководство поможет.

Благодаря

EDIT: я следовал за этим bridge-building, но не мог понять, какой диапазон IP, чтобы дать мост, так что я дал 192.168.254.1/24. Команда ip addr show bridge0 показывает state UNKNOWN.

ответ

1

Предполагаю, что вы используете Docker для Windows с хостом Linux, работающим на Virtualbox. Обратите внимание, что по умолчанию docker-machine создает NAT-адаптер (с переадресацией порта) и адаптер только для хоста, иногда бывает сложно получить разные машины, чтобы разговаривать с правильным ip.

Как сказал Адриан, вы обычно «публикуете» порты путем переадресации портов, но если ваш контейнер должен связываться через многие порты, и вы используете только один такой контейнер/хост, проще запустить контейнер через docker run --net host ..., это в сетевом контейнере напрямую видны сетевые адаптеры (как я обнаружил here).

+0

Спасибо за предложение. Без -net хоста я могу иметь связь от хоста к контейнеру. Думаю, если я это сделаю, я тоже смогу общаться. Есть ли другой способ, чтобы контейнер связывался с хостом? – user3275095

+0

В моем понимающем хосте любой другой компьютер может связываться с контейнером, если его порт был «опубликован» с '-p' или' --publish', как описано [здесь] (https://docs.docker.com/articles/ сеть/# связывающие порты). Моя проблема заключалась в том, что в контейнере использовался сложный протокол с несколькими портами, поэтому настройка их была утомительной. Также в некоторых конфигурациях многие контейнеры запускаются на одном и том же хосте, а порты открыты для других контейнеров, но не для других внешних машин, это команда 'EXPOSE' в Dockerfiles или' --expose' при запуске контейнера. – NikoNyrh

2

Обычный способ сделать это просто опубликовать порт на контейнер и использовать IP-адрес виртуальной машины, например:

docker run -d -p 80:80 nginx 

Затем посетит IP виртуальную машину в браузере работает на хосте и вы должны получить веб-страницу.

+0

Спасибо. Я уже делаю это, но не тестировал сервис. Это не веб-сервис, поэтому я просто PINGED ip контейнера, который не работал. В любом случае, его работа без каких-либо изменений. Но от контейнера до хозяина я думаю, что я должен следовать совету @NikoNyrh или есть другой способ тоже? – user3275095

+0

Ping будет работать, если правильный порт «опубликован», я не стал проверять, какой из них. 'netstat -peanut' - очень удобная команда для запуска на хосте и внутри контейнера, чтобы увидеть, как порты настраиваются и прослушиваются :) – NikoNyrh

Смежные вопросы