使用Docker将端口仅暴露给本地主机

9

我想将数据库访问限制为127.0.0.1,因此我执行了以下命令:

docker run -it mysql:5.5 -p 127.0.0.1:3306:3306 -name db.mysql 

但是我有一些困惑......

您可以在这里看到只会转发127.0.0.1的端口:

; docker ps
mysql:5.5     127.0.0.1:3306->3306/tcp   db.mysql

有趣的是,在iptables中我找不到这个限制:
; iptables -L
Chain FORWARD (policy DROP)
DOCKER     all  --  anywhere             anywhere

Chain DOCKER (2 references)                                                                                                                                                                  
target     prot opt source               destination
ACCEPT     tcp  --  anywhere             192.168.112.2        tcp dpt:mysql

这条规则的来源是anywhere
1个回答

11

流入的流量将按照以下方式进行:

Incoming package to host's network -> use ip tables to forward to container

同时,你的限制不在iptables中,而是在主机的网络中,你只是将3306绑定在127.0.0.1而不是0.0.0.0,所以你当然在iptables中看不到任何内容。 127.0.0.1:3306:3306意味着主机IP:主机端口:容器端口

你可以通过运行netstat -oanltp | grep 3306来确认它,以查看是否有0.0.0.0存在,因此没有外部主机可以访问你的主机,也无法访问你的容器。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接