远程访问docker容器中的webserver

时间:2014-02-23 15:36:42

标签: docker ubuntu-server

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

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

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

运行时

docker port <container-id> 443

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

172.16.*.*:<random-port>

有什么想法吗?

谢谢!

3 个答案:

答案 0 :(得分:9)

我想出了我错过的内容,所以这是从远程机器访问docker容器webapps的简单流程:

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

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

(请参阅docker docs for port redirection并附上所有选项)

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

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

这应该涵盖基本用例。

祝你好运!

答案 1 :(得分:3)

如果我错了,请纠正我,但据我所知,docker host为它的容器创建了一个专用网络,这些容器无法从外部访问。那说你最好的选择可能是访问{host_IP}上的容器:{mapped_port}。

答案 2 :(得分:1)

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

$ 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地址将到达容器。