我开始使用Docker进行开发,以下是我的设置:
- 主机 - Ubuntu服务器。
- Docker容器 - 带有Tomcat服务器的Web应用程序(使用https)。
就主机-容器访问而言,一切正常。 但是,我无法从远程机器(仍在同一网络中)访问容器的Web应用程序。
运行时:
docker port <container-id> 443
输出结果与预期一致,因此 Docker 的端口绑定似乎没有问题。
172.16.*.*:<random-port>
有什么想法吗?
谢谢!
我开始使用Docker进行开发,以下是我的设置:
就主机-容器访问而言,一切正常。 但是,我无法从远程机器(仍在同一网络中)访问容器的Web应用程序。
运行时:
docker port <container-id> 443
输出结果与预期一致,因此 Docker 的端口绑定似乎没有问题。
172.16.*.*:<random-port>
有什么想法吗?
谢谢!
docker run -p 127.0.0.1:443:3444 -d <docker-image-name>
步骤#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
有几种方法可以从外部设备(在同一网络中)访问Docker容器,详细信息请查看此文章http://blog.nunes.io/2015/05/02/how-to-access-docker-containers-from-external-devices.html