白话容器之docker的4种端口暴露方式(11)

2023年 7月 16日 79.1k 0

端口暴露有4中方式:

1,将指定容器端口映射到主机所有地址的一个动态端口

我们将内网的端口80使用—p暴露

[root@linuxea.com_10_10_240_145 ~]$ docker run --name linuxea -it --network bridge -p 80 --rm linuxea/httpd:v1 httpd -f -h /data/5idocker

而后可以使用curl容器ip访问

[root@linuxea.com_10_10_240_145 ~]$  docker inspect -f {{.NetworkSettings.Networks.linuxea0.IPAddress}}  linuxea
[root@linuxea.com_10_10_240_145 /data/mirrors/wwwroot]$ curl 172.17.0.4
helo www.linuxea.com

如果要使用node ip访问,就需要查看这个随机的暴露端口iptables -t nat -vnL,如下

这段意思就是当访问1024端口就被转发到172.17.0.4:80端口

[root@linuxea.com_10_10_240_145 /data/mirrors/wwwroot]$ iptables -t nat -vnL
Chain DOCKER (2 references)
 pkts bytes target     prot opt in     out     source               destination         
    1    84 RETURN     all  --  docker0 *       0.0.0.0/0            0.0.0.0/0           
    0     0 DNAT       tcp  --  !docker0 *       0.0.0.0/0            0.0.0.0/0            tcp dpt:1024 to:172.17.0.4:80

也可以通过docker ps -a查看

[root@linuxea.com_10_10_240_145 /data/mirrors/wwwroot]$ docker ps -a
CONTAINER ID        IMAGE                        COMMAND                  CREATED             STATUS                  PORTS                  NAMES
3bfe5d8feb8c        linuxea/httpd:v1             "httpd -f -h /data/5…"   13 hours ago        Up 13 hours             0.0.0.0:1024->80/tcp   linuxea

而后通过10.10.240.145:1025访问

[root@linuxea.com_10_10_240_145 /data/mirrors/wwwroot]$ curl 10.10.240.145:1024
helo www.linuxea.com

也可以在物理机访问docker-34.png

此时删除容器,防火墙规则也会删除

2,将容器端口映射到指定的主机端口

一般情形,容器监听什么端口,我们就该暴露什么端口

-p hostport:containerport ,本地端口:容器端口

[root@linuxea.com_10_10_240_145 /data/mirrors/wwwroot]$ docker run --name linuxea -it --network bridge -p 81:80 --rm linuxea/httpd:v1 httpd -f -h /data/5idocker
[root@linuxea.com_10_10_240_145 ~]$ docker port linuxea
80/tcp -> 0.0.0.0:81

而后通过浏览器访问docker-35.png

3,将指定的容器端口映射到主机的指定的动态端口

如果我们想将容器内的端口暴露到指定的端口映射到物理的端口,就可以使用-p ip::containerport

ip::80 其中::中间是随机端口,ip是本机ip,80是容器内端口

[root@linuxea.com_10_10_240_145 /data/mirrors/wwwroot]$ docker run --name linuxea -it --network bridge -p 10.10.240.145::80 --rm linuxea/httpd:v1 httpd -f -h /data/5idocker

查看端口

[root@linuxea.com_10_10_240_145 ~]$ docker port linuxea
80/tcp -> 10.10.240.145:1024

通过浏览器访问docker-34.png

4,将指定的容器端口映射到主机指定的端口

我们不但可以向如上那样使用动态端口,指定固定端口,指定主机动态端口,也可以指定主机固定端口

[root@linuxea.com_10_10_240_145 ~]$ docker run --name linuxea -it --network bridge -p 10.10.240.145:81:80 --rm linuxea/httpd:v1 httpd -f -h /data/5idocker
[root@linuxea.com_10_10_240_145 ~]$ docker port linuxea
80/tcp -> 10.10.240.145:81

通过浏览器访问docker-35.png

注意事项:暴露端口,这个端口在容器内必须是被监听的,也就是存在的,如果容器内不存在这个端口,就算你暴露了也是没有用的。并且-p选项可以使用多次-p 80:80 -p 8080:8080。

而使用了-P大写的P,就可以暴露容器内已经监听的端口。

相关文章

LeaferJS 1.0 重磅发布:强悍的前端 Canvas 渲染引擎
10分钟搞定支持通配符的永久有效免费HTTPS证书
300 多个 Microsoft Excel 快捷方式
一步步配置基于kubeadmin的kubevip高可用
istio全链路传递cookie和header灰度
REST Web 服务版本控制

发布评论