如何发布一个不同于默认端口的端口?

我正在学习docker并开始使用一个简单的基于python的web服务器,在调用时回复“Hello World”。 我很难理解如何公开特定的端口。

背景

 # the Dockerfile FROM ubuntu RUN apt-get -qq update RUN apt-get install -y python RUN echo "Hello world" > index.html CMD ["/usr/bin/python", "-m", "SimpleHTTPServer"] 

默认情况下,该Web服务器显示端口8000:

 $ python -m SimpleHTTPServer Serving HTTP on 0.0.0.0 port 8000 ... 

当我启动容器时,

 # docker run -d 06b5c2fc603e 2ca568ba0799ab00af72f230ec99038e225265a4af073da54026b7a90bacb0c9 # docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 2ca568ba0799 06b5c2fc603e "/usr/bin/python -m 4 seconds ago Up 3 seconds tender_davinci # docker inspect 2ca568ba0799 | grep IPAddress "IPAddress": "172.17.0.84" 

检查端口8000是否在分配的IP地址上回答 – 确实如此。

 # curl -XGET 172.17.0.84:8000 Hello world 

现在我想发布这个端口,以便其他主机可以访问。

 # docker run -d -p 8000:8000 06b5c2fc603e 6715c6fd58100c27fbdc26895755e164ae3b241f6bd6e43c331ca44cf388d6f1 # docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 6715c6fd5810 06b5c2fc603e "/usr/bin/python -m 3 seconds ago Up 3 seconds 0.0.0.0:8000->8000/tcp cocky_tesla 

从远程站点检查 – 它的工作

 # curl -XGET 10.242.136.232:8000 Hello world 

现在的问题是 :当我想要更改发布的端口(从8000到8888)时,这个失败:

 # docker run -d -p 8000:8888 06b5c2fc603e 0f2e9f79a51e4710f9e8be90376e080928904e6b7320771ca5ad4f829043a6ca # docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 0f2e9f79a51e 06b5c2fc603e "/usr/bin/python -m 4 seconds ago Up 3 seconds 0.0.0.0:8000->8888/tcp adoring_goodall 

并从远程主机访问

 # curl -XGET 10.242.136.232:8888 curl: (7) couldn't connect to host 

docker似乎正确的NAT端口( 0.0.0.0:8000->8888/tcp ),为什么它不是一旦从容器中的服务所暴露的一个变化可用?

注意:没有阻止stream量的防火墙/networkingACL

关于networking话题有几个问题(其中一个问题的答案给出了很好的概述), 而且文档非常清晰(特别是在例子中),所以我很茫然。

您必须交换端口的顺序,如下所示:

 # docker run -d -p 8888:8000 06b5c2fc603e 

根据Docker运行文档,第一个端口是主机端口,第二个是容器端口 – > hostPort:containerPort