Удаленный доступ к веб-серверу в контейнере docker
Я начал использовать docker для dev со следующей настройкой:
- хост-машина-сервер ubuntu.
- docker container-webapp w / tomcat server (с использованием https).
что касается доступа к хост-контейнеру - все работает нормально. , я не могу получить доступ к webapp контейнера с удаленного компьютера (хотя все еще в той же сети).
при работе
docker port <container-id> 443
вывод ожидается, поэтому привязка порта docker кажется прекрасной.
172.16.*.*:<random-port>
какие идеи?
спасибо!
4 ответов
Я понял, что пропустил, поэтому вот простой поток для доступа к контейнерам docker webapps с удаленных машин:
Шаг #1: привязка физических портов хоста (например, 22, 443, 80, ...) к виртуальным портам контейнера. возможный синтаксис:
docker run -p 127.0.0.1:443:3444 -d <docker-image-name>
(см. Docker docs для перенаправления портов со всеми опциями)
Шаг 2 : перенаправить физический порт хоста на выделенный виртуальный порт контейнера. возможно (Линукс) синтаксис:
iptables -t nat -A PREROUTING -i <host-interface-device> -p tcp --dport <host-physical-port> -j REDIRECT --to-port <container-virtual-port>
Это должно охватывать базовый вариант использования.
удачи!
исправьте меня, если я ошибаюсь, но, насколько мне известно, Docker host создает частную сеть для своих контейнеров, которые недоступны извне. Тем не менее, лучше всего было бы получить доступ к контейнеру по адресу {host_IP}:{mapped_port}.
если ваш контейнер был построен с Dockerfile, который имеет EXPOSE
заявление, например,EXPOSE 443
, тогда вы можете запустить контейнер с -P
опция (как в "опубликовать" или "public"). Порт будет доступен для соединений с удаленных компьютеров:
$ docker run -d -P mywebservice
если вы не использовали Dockerfile, или если у него не было EXPOSE
заявление (оно должно!), то вы также можете сделать явное сопоставление портов:
$ docker run -d -p 80 mywebservice
в обоих случаях результатом будет общедоступный порт:
$ docker ps
9bcb… mywebservice:latest … 0.0.0.0:49153->80/tcp …
последнее, но не менее, вы можете заставить номер порта, если вам нужно:
$ docker run -d -p 8442:80 mywebservice
в этом случае подключение к IP-адресу хоста Docker на порту 8442 достигнет контейнера.
есть несколько альтернатив доступа к контейнерам docker с внешнего устройства( в той же сети), ознакомьтесь с этой записью для получения дополнительной информации http://blog.nunes.io/2015/05/02/how-to-access-docker-containers-from-external-devices.html