远程访问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