Docker выставляет порт только на localhost - PullRequest
3 голосов
/ 29 сентября 2019

Я хочу ограничить доступ к моей базе данных 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 Ответ

3 голосов
/ 29 сентября 2019

Входящий трафик будет выглядеть следующим образом:

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

И ваше ограничение не было в iptables, оно было в сети хоста, вы просто открыли 3306 bind на 127.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 не было, поэтому ни один иностранный хост не мог посетить ваш хост-компьютер, таким образом, также не мог посетить ваш контейнер.

...