Fork me on GitHub

Docker 容器端口映射方法

docker容器在启动的时候,如果不指定端口映射参数,在容器外部是无法通过网络来访问容器内的网络应用和服务的。

现在有如下两种方式导出端口:

启动容器的时候通过-P,-p或者–expose参数动态指定:

端口映射支持的格式

ip : host port : container port #指定宿主机ip、指定宿主机port、指定容器

ip :: container port #指定ip、指定容器port

host port : container port #指定宿主机port、指定容器port

1
$docker run -P -it ubuntu /bin/bash

以上指令会将容器暴露的所有端口,都随机映射到宿主机上(不推荐)

1
$docker run -P 80 -it ubuntu  /bin/bash

以上指令会将容器的80端口随机映射到宿主机的一个端口上

1
$docker run -p 8000:80 -it ubuntu /bin/bash

以上指令会将容器的80端口映射到宿主机的8000端口上

1
$docker run -P 192.168.0.100::80 -it ubuntu  /bin/bash

以上指令会将容器的IP 192.168.0.100和80端口,映射到宿主机的8000端口

1
docker run -p 1000-2000:1000-2000 -it ubuntu  /bin/bash

以上指令会将容器的1000-2000的所有端口,映射到宿主机端口1000-2000

1
$docker run --expose=1000-2000 -it ubuntu  /bin/bash

以上指令会将容器的1000-2000的所有端口,随机映射到宿主机端口上

在Dockerfile里面通过EXPOSE指令静态配置:

EXPOSE指令只是指定暴露容器内部端口,映射规则还需要在运行容器时通过-P参数指定

1
2
3
4
5
6
7
8
9
10
11
# GET_IMAGE
FROM centos

# MAINTAINER_INFO
MAINTAINER hongxue hongxue@showjoy.com

RUN yum -y install vim

# PORT
EXPOSE 8080
EXPOSE 22

上述Dockerfile暴露了容器内的8080和22两个端口给宿主机。

运行容器时,通过增加-P参数,Docker会自动为用户创建端口映射规则,并且帮助避免端口映射的冲突,这两个端口会被随机映射到宿主机上的两个端口上,

1
$docker run -d -it -P --name container_name image_name

EXPOSE指令也支持指定端口范围

1
EXPOSE 7000-8000
查看指定容器端口映射配置:

示例:

1
2
$docker port container_ID ``#容器ID
80/tcp -> 0.0.0.0:800
您的鼓励是我持之以恒的动力