我想限制我的数据库访问127.0.0.1,所以我执行了以下命令:
docker run -it mysql:5.5 -p 127.0.0.1:3306:3306 -name db.mysql
Run Code Online (Sandbox Code Playgroud)
但是我有一些困惑......
您可以在此处看到仅127.0.0.1转发端口:
; docker ps
mysql:5.5 127.0.0.1:3306->3306/tcp db.mysql
Run Code Online (Sandbox Code Playgroud)
有趣的是,我在 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
Run Code Online (Sandbox Code Playgroud)
这个规则的来源是anywhere。
传入流量将如下所示:
Incoming package to host's network -> use ip tables to forward to container
Run Code Online (Sandbox Code Playgroud)
而且,您的限制不在 iptables 中,它在主机的网络中,您只需打开3306bind on127.0.0.1而不是0.0.0.0,所以您当然在 iptables 中看不到任何内容。127.0.0.1:3306:3306是指hostIp:hostPort:containerPort。
你可以确认它netstat -oanltp | grep 3306看到没有0.0.0.0在那里,所以没有国外主机可以访问你的主机,因此也无法访问您的容器。
| 归档时间: |
|
| 查看次数: |
5676 次 |
| 最近记录: |