开放容器端口
执行docker run的时候有个-p选项,可以将容器中的应用端口映射到宿主机中,从而实现让外部主机可以通过访问宿主机的某端口来访问容器内应用的目的。
-p选项能够使用多次,其所能够暴露的端口必须是容器确实在监听的端口。
-p选项的使用格式:
- -p
- 将指定的容器端口映射至主机所有地址的一个动态端口
- -p :
- 将容器端口映射至指定的主机端口
- -p ::
- 将指定的容器端口映射至主机指定的动态端口
- -p ::
- 将指定的容器端口映射至主机指定的端口
动态端口指的是随机端口,具体的映射结果可使用docker port命令查看。
[root@localhost ~]# docker run -itd -p 80 busybox
a71a96e98b5e2ff3c68ba535658fa3d61a2fe147bccb48d74cdbf8d070c8b6f2
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a71a96e98b5e busybox "sh" 4 seconds ago Up 3 seconds 0.0.0.0:49155->80/tcp, :::49155->80/tcp frosty_beaver
[root@localhost ~]# ss -anlt
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
LISTEN 0 128 0.0.0.0:49155 0.0.0.0:*
LISTEN 0 128 [::]:22 [::]:*
LISTEN 0 128 [::]:49155 [::]:*
[root@localhost ~]# docker port a71a96e98b5e
80/tcp -> 0.0.0.0:49155
80/tcp -> :::49155
[root@localhost ~]#
由此可见,容器的80端口被暴露到了宿主机的49155端口上,此时我们访问一下这个端口看是否能访问到容器内的站点
iptables防火墙规则将随容器的创建自动生成,随容器的删除自动删除规则。
将容器端口映射到指定IP的随机端口
[root@localhost ~]# docker run -itd -p 192.168.141.135::80 httpd
ac24345517ffb80a469dc9022c1e86718665992a7825bf03409a502ba7cfa1ab
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ac24345517ff httpd "httpd-foreground" 23 seconds ago Up 23 seconds 192.168.141.135:49153->80/tcp youthful_keller
在另一个终端上查看端口映射情况
[root@localhost ~]# docker port ac24345517ff
80/tcp -> 192.168.141.135:49153
[root@localhost ~]#
将容器端口映射到宿主机的指定端口
[root@localhost ~]