Почему контейнер Docker, в котором запущен сервер, предоставляет порт внешнему миру, даже если указанный порт заблокирован iptables?

У меня возникла проблема с MySQL, работающим внутри контейнера Docker. Мой тестовый образ создан из следующего файла Dockerfile:

# See: https://index.docker.io/u/brice/mysql/FROM ubuntu:12.10MAINTAINER Joni Kahara <joni.kahara@async.fi> # Because docker replaces /sbin/init: https://github.com/dotcloud/docker/issues/1024RUN dpkg-divert --local --rename --add /sbin/initctlRUN ln -s /bin/true /sbin/initctlRUN apt-get updateRUN apt-get upgrade -yRUN apt-get -y install mysql-serverRUN sed -i -e"s/^bind-address\s*=\s*127.0.0.1/bind-address = 0.0.0.0/" /etc/mysql/my.cnfRUN /usr/bin/mysqld_safe & \    sleep 10s && \    mysql -e "GRANT ALL ON *.* to 'root'@'%'; FLUSH PRIVILEGES;"EXPOSE 3306VOLUME ["/var/lib/mysql", "/var/log/mysql"]CMD ["mysqld_safe"]

После создания образа из приведенного выше файла я запускаю его с помощью:

docker run -p 3306:3306 asyncfi/magento-mysql

После чего все наладится, и я смогу войти в этот экземпляр MySQL с локального компьютера. Однако я также могу войти в систему с любого другого компьютера.

Я настроил свой брандмауэр на фильтрацию всего, кроме трафика, поступающего на определенные порты ("скрытые" SSH, HTTP, HTTPS), и эта фильтрация, похоже, действительно работает; если я, например, запускаю сервер разработки Django на порту 1234, я могу подключиться с локального компьютера, но не извне. Таким образом, брандмауэр, по-видимому, фильтрует пакеты, когда они предназначены для сервера, который работает как "обычный" процесс, но не тогда, когда сервер работает внутри контейнера.

iptables -L -v --line-numbers говорит следующее:

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)num   pkts bytes target     prot opt in     out     source               destination1     2265  107K ACCEPT     all  --  lo     any     anywhere             anywhere2     240K  319M ACCEPT     all  --  any    any     anywhere             anywhere             ctstate RELATED,ESTABLISHED3       14  1040 ACCEPT     tcp  --  any    any     anywhere             anywhere             tcp dpt:<REDACTED>4       21  1092 ACCEPT     tcp  --  any    any     anywhere             anywhere             tcp dpt:http5        6   360 ACCEPT     tcp  --  any    any     anywhere             anywhere             tcp dpt:https6      538 34656 LOG        all  --  any    any     anywhere             anywhere             limit: avg 5/min burst 5 LOG level debug prefix "iptables DROP: "7      551 35424 DROP       all  --  any    any     anywhere             anywhereChain FORWARD (policy ACCEPT 5 packets, 296 bytes)num   pkts bytes target     prot opt in     out     source               destination1        0     0 ACCEPT     all  --  docker0 docker0  anywhere             anywhere2     6752  396K ACCEPT     all  --  docker0 !docker0  anywhere             anywhere3     125K  188M ACCEPT     all  --  any    docker0  anywhere             anywhere             ctstate RELATED,ESTABLISHEDChain OUTPUT (policy ACCEPT 51148 packets, 14M bytes)num   pkts bytes target     prot opt in     out     source               destination

Версия Docker - это:

Client version: 0.7.3Go version (client): go1.2Git commit (client): 8502ad4Server version: 0.7.3Git commit (server): 8502ad4Go version (server): go1.2Last stable version: 0.7.3

Почему порт MySQL открыт для внешнего мира?