docker--端口映射

时间:2020-04-21
本文章向大家介绍docker--端口映射,主要包括docker--端口映射使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
端口映射
#查看容器端口映射信息
[root@localhost ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
d4d7e7115dc9        nginx:latest        "nginx -g 'daemon of…"   3 days ago          Up 20 minutes       80/tcp              nginx-test
[root@localhost ~]# docker inspect d4d7e7115dc9
#获取到ip地址
未做端口映射之前外部无法访问
#无法访问
[root@localhost ~]# curl 172.17.0.1
curl: (7) Failed connect to 172.17.0.1:80; Connection refused
[root@localhost ~]#

端口映射实现了外部环境访问容器内部:

  • 第一类:把容器的端口随机映射为物理机的一个端口

0.0.0.0:是本机的ip
32768:是本机的端口
80:是容器的端口
使用-P选项是把容器内使用expose的端口都映射为物理机的同一个端口
[root@localhost ~]# docker run -d -P nginx#大写的P,随机映射为物理机的端口
81d654f4fda113aab1a2ff750f27fc760bc0ea895023f0b064084ad8ec97d8e2
[root@localhost ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                   NAMES
81d654f4fda1        nginx               "nginx -g 'daemon of…"   27 seconds ago      Up 25 seconds       0.0.0.0:32768->80/tcp   elated_bouman
d4d7e7115dc9        nginx:latest        "nginx -g 'daemon of…"   3 days ago          Up 29 minutes       80/tcp                  nginx-test
[root@localhost ~]# ss -tnl#物理机启动了相应的二端口
State       Recv-Q Send-Q                                                           Local Address:Port                                                                          Peer Address:Port              
LISTEN      0      128                                                                          *:22                                                                                       *:*                  
LISTEN      0      80                                                                          :::3306                                                                                    :::*                  
LISTEN      0      128                                                                         :::22                                                                                      :::*                  
LISTEN      0      128                                                                         :::32768                                                                                   :::*   
 
#也可以查看端口映射信息
[root@localhost ~]# docker port 81d654f4fda1
80/tcp -> 0.0.0.0:32768
外部访问:
  • 第二类:把容器的端口映射为物理机特定的一个端口

 用小写的p
[root@localhost ~]# docker run -d -p 22:80 nginx #小写的p,22是物理机的端口,80是容器的端口,如果映射的物理机端口被占用了会报错
adb509ee2eb40a5544c147f976ef020de7c31a7c966acd76094ba5328c9d2985
docker: Error response from daemon: driver failed programming external connectivity on endpoint frosty_wiles (f196cc4ff580eb2e39aab714ee0299576364b110fce7c0f27dfcb0f8b51f8d35): Error starting userland proxy: listen tcp 0.0.0.0:22: bind: address already in use.
 
 
[root@localhost ~]# docker run -d -p 80:80 nginx  #指定特定端口,第一个80是物理机的端口,第二个是物理机的端口
cced033e1b8b51d2557e54cbcdad1a3df3f5e2a5533dbf4118464ab96bec7583
[root@localhost ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                   NAMES
cced033e1b8b        nginx               "nginx -g 'daemon of…"   15 seconds ago      Up 14 seconds       0.0.0.0:80->80/tcp      kind_neumann
81d654f4fda1        nginx               "nginx -g 'daemon of…"   12 minutes ago      Up 12 minutes       0.0.0.0:32768->80/tcp   elated_bouman
d4d7e7115dc9        nginx:latest        "nginx -g 'daemon of…"   3 days ago          Up 41 minutes       80/tcp                  nginx-test
[root@localhost ~]# docker port cced033e1b8b
80/tcp -> 0.0.0.0:80
  • 第三类:把容器端口映射为特定网卡上的随机端口

1,在虚拟机上添加网卡(我这里还是用的本虚拟机没有添加,可以添加一下效果更明显)
[root@localhost ~]# docker run -d -p 192.168.10.111::80 nginx#小写的p,把容器的80端口随机映射为192.168.10.111上的随机端口,ip冒号后面没有写的端口号表示随机映射
2fd41e5658208030a2c6f7fc127f21cc650c4aeb83277d5255308750c5280283
[root@localhost ~]# docker port 2fd41e5658208030a2c
80/tcp -> 192.168.10.111:32769
[root@localhost ~]# ss -tnl
State      Recv-Q Send-Q     Local Address:Port                    Peer Address:Port              
LISTEN     0      128                    *:22                                 *:*                  
LISTEN     0      128       192.168.10.111:32769                              *:*                  
LISTEN     0      80                    :::3306                              :::*                  
LISTEN     0      128                   :::80                                :::*                  
LISTEN     0      128                   :::22                                :::*                  
LISTEN     0      128                   :::32768                             :::*  
 外部访问:
  • 第四类:把容器端口映射为特定网卡上的特定端口

[root@localhost ~]# docker run -d -p 192.168.10.111:81:80 nginx#把容器的80端口随机映射为192.168.10.111上的81端口
ddaee9efbcf68f055b60730671ffa907de086cf8cbe2b28441d51c4797f8fd72
[root@localhost ~]# docker port ddaee9efbcf68f055b60
80/tcp -> 192.168.10.111:81
[root@localhost ~]# ss -tnl
State      Recv-Q Send-Q     Local Address:Port                    Peer Address:Port              
LISTEN     0      128       192.168.10.111:81                                 *:*                  
LISTEN     0      128                    *:22                                 *:*                  
LISTEN     0      128       192.168.10.111:32769                              *:*                  
LISTEN     0      80                    :::3306                              :::*                  
LISTEN     0      128                   :::80                                :::*                  
LISTEN     0      128                   :::22                                :::*                  
LISTEN     0      128                   :::32768                             :::*
访问:
总结:
1 在端口映射中使用到了两个选项,
一个是大写的P,表示把容器暴露的端口随机映射为物理机上的一个端口,不能指定特定网卡
2 另外一个是小写的p,可以把容器暴露的端口映射为物理机特定的端口,或者元素为物理机特定网卡上的随机端口或者特定网卡上的特定端口
镜像分类:
1 工具类的镜像:busybox,启动工具类进行是使用交互模式docker run-it来启动
2 服务类镜像:nginx,启动服务类镜像使用的docker -d来启动,后台运行

原文地址:https://www.cnblogs.com/wenm1128/p/12739186.html