在Docker容器中远程访问Web服务器

11

我开始使用Docker进行开发,以下是我的设置:

  • 主机 - Ubuntu服务器。
  • Docker容器 - 带有Tomcat服务器的Web应用程序(使用https)。

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

运行时:

docker port <container-id> 443

输出结果与预期一致,因此 Docker 的端口绑定似乎没有问题。

172.16.*.*:<random-port>

有什么想法吗?

谢谢!

4个回答

10
我找出了我错过的部分,这里是一个简单的流程,用于从远程机器访问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>

这应该包含了基本用例。

祝你好运!


3

如果我说错了,请纠正我,但据我所知,Docker主机为其容器创建了一个私有网络,无法从外部访问。也就是说,您最好通过{host_IP}:{mapped_port}访问容器。


你是对的,应该按照这种方式操作(参见docker.io:端口重定向)。然而,我的问题似乎与我的主机(ubuntu server 13.10)有关,当我从远程机器访问https://{host_IP}:{mapped_port}时,它没有将我重定向到容器。 - tomper

2
如果您的容器是使用具有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

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

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接