远程访问 docker 容器中的 Web 服务器



我已经开始使用 docker for dev,设置如下:

  • 主机 - Ubuntu 服务器。
  • Docker 容器 - 带 tomcat 服务器的 webapp(使用 https)。

就主机容器访问而言 - 一切正常。但是,我无法从远程计算机(尽管仍在同一个网络中)访问容器的 Web 应用程序。

运行时

docker port <container-id> 443

输出符合预期,因此 docker 的端口绑定似乎很好。

172.16.*.*:<random-port>

有什么想法吗?

谢谢!

我想出了我错过了什么,所以这里有一个简单的流程,用于从远程机器访问 docker 容器 Web 应用程序:

步骤#1:将物理主机端口(例如22,443,80等)绑定到容器的虚拟端口。可能的语法:

    docker run -p 127.0.0.1:443:3444 -d <docker-image-name>

(请参阅 Docker 文档,了解包含所有选项的端口重定向)

步骤#2:将主机的物理端口重定向到容器分配的虚拟端口。 可能的 (Linux) 语法:

    iptables -t nat -A PREROUTING -i <host-interface-device> -p tcp --dport <host-physical-port> -j REDIRECT --to-port <container-virtual-port>

这应该涵盖基本用例。

祝你好运!

如果我

错了,请纠正我,但据我所知,docker 主机为其容器创建了一个无法从外部访问的专用网络。也就是说,最好的选择可能是访问 {host_IP}:{mapped_port} 的容器。

如果您的容器是使用具有EXPOSE语句的 Dockerfile 构建的,例如 EXPOSE 443 ,然后您可以使用-P选项启动容器(如"发布"或"公共")。该端口将可用于来自远程计算机的连接:

$ 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

在这种情况下,连接到端口 8442 上的 Docker 主机 IP 地址将到达容器。

如何从外部设备(在同一网络中)访问 docker 容器有一些替代方法,请查看这篇文章以获取更多信息 http://blog.nunes.io/2015/05/02/how-to-access-docker-containers-from-external-devices.html

最新更新