对docker原生端口映射的随记

来自三线的随记

Env Infomation

  • kernel 3.10.0-957.el7.x86_64
  • CentOS Linux release 7.6.1810 (Core)
  • Docker Server Version: 19.03.8
[root@dx-poc-w03 ~]# docker run -itd --name docker-test -p127.0.0.1:2344:2344 --entrypoint=bash docker.elastic.co/beats/filebeat:7.6.0
6bb73a6bde431623e2ab0d9641e3b9b20c9b71c5bee133e99a97363889751d9e

[root@dx-poc-w03 ~]# iptables-save | grep 2344
-A DOCKER -d 172.17.0.2/32 ! -i docker0 -o docker0 -p tcp -m tcp --dport 2344 -j ACCEPT
-A POSTROUTING -s 172.17.0.2/32 -d 172.17.0.2/32 -p tcp -m tcp --dport 2344 -j MASQUERADE
-A DOCKER -d 127.0.0.1/32 ! -i docker0 -p tcp -m tcp --dport 2344 -j DNAT --to-destination 172.17.0.2:2344

[root@dx-poc-w03 ~]# ss -nplt | grep 2344
LISTEN     0      4096   127.0.0.1:2344                     *:*                   users:(("docker-proxy",pid=70509,fd=4))

[root@dx-poc-w03 ~]# docker stop docker-test
docker-test
[root@dx-poc-w03 ~]# ss -nplt | grep 2344

原生docker通过docker run 命令并且expose端口(-p) ,在container runing的时候相应的地址端口二元组会在节点上建立监听(监听进程为 docker-proxy)

容器stop 或者Exited以后,相应的端口也会取消监听


同理,iptables相应的端口转发规则也只会在container 正常running的时候会建立