容器中可以运行一些网络应用,要让外部也可以访问这些应用,可以通过 -P 或 -p 参数来指定端口映射。


端口映射

使用 docker ps 可以看到容器状态,包括端口状态。例如,该示例中端口 5000 绑定主机端口 32768。

runoob@runoob:~$ docker ps
CONTAINER ID    IMAGE               COMMAND            ...           PORTS                     NAMES
fce072cc88ce    training/webapp     "python app.py"    ...     0.0.0.0:32768->5000/tcp   grave_hopper

可以使用 -p 标识来指定容器端口绑定到主机端口。

两种方式的区别是:

runoob@runoob:~$ docker run -d -p 5001:5000 training/webapp python app.py
33e4523d30aaf0258915c368e66e03b49535de0ef20317d3f639d40222ba6bc0

注意,5001为本地端口,5000为容器端口。

上面的例子中,默认都是绑定 tcp 端口,如果要绑定 UDP 端口,可以在端口后面加上 /udp

例如:

docker run -d -p 127.0.0.1:5000:5000/udp training/webapp python app.py

docker port 命令可以快捷地查看端口的绑定情况。

runoob@runoob:~$ docker port adoring_stonebraker 5000
127.0.0.1:5001

容器互联

端口映射并不是唯一把 docker 连接到另一个容器的方法。