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

我已经开始使用docker for dev了,具有以下设置:

  • 主机 – Ubuntu的服务器。
  • Docker容器 – webapp w / tomcat服务器(使用https)。

至于主机容器访问 – 一切工作正常。 但是 ,我无法设法从远程机器访问容器的web应用程序(尽pipe仍在同一个networking中)。

运行时

docker port <container-id> 443 

输出是预期的,所以docker的端口绑定似乎很好。

 172.16.*.*:<random-port> 

有任何想法吗?

谢谢!

我想清楚我错过了什么,所以下面是从远程机器访问docker容器webapps的简单stream程:

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

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

(有关所有选项的端口redirect ,请参阅docker文档 )

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

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

这应该涵盖基本的用例。

祝你好运!

纠正我,如果我错了,但据我所知,docker主机创build一个私人networking的容器是从外部不可访问的容器。 这就是说你最好的select可能是在{host_IP}访问容器:{mapped_port}。

如果您的容器是使用具有EXPOSE语句的EXPOSE ,例如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地址将到达容器。

有一些如何从外部设备(在同一个networking)访问docker集装箱的替代品,看看这个职位了解更多信息http://blog.nunes.io/2015/05/02/how-to-access-搬运工的容器从-外部devices.html