无法从主机访问mysql docker容器

我有一个运行在官方mysql容器( https://registry.hub.docker.com/_/mysql/ )上的docker 1.6.0的debian服务器。

我使用一个相当基本的防火墙configuration,其中所有端口都closures,除了SSH,HTTP和NTP( http://pastebin.com/raw.php?i=dFUcJWxy )。

当我尝试连接到我的mysql数据库时:

 mysql -u root -h 172.17.0.3 -p 

我收到以下错误信息:

 ERROR 2003 (HY000): Can't connect to MySQL server on '172.17.0.3' (110) 

端口3306被过滤:

 nmap -p 3306 172.17.0.3 PORT STATE SERVICE 3306/tcp filtered mysql 

…当我打开主机上的端口3306我可以访问到MySQL服务器。

如何在不打开主机端口3306的情况下访问mysql服务器容器?

进一步的信息可以帮助:

启动容器的任务非常简单:

 - name: Mysql container docker: name: mysql image: mysql:5.7 state: started volumes: - /var/container_data/mysql:/var/lib/mysql ports: - "127.0.0.1:3306:3306" env: MYSQL_ROOT_PASSWORD: my-root-password 

docker inspect mysql – > pastebin.com/raw.php?i=uhXEhuXJ

iptables -L – > pastebin.com/raw.php?i=18fkgktF

ifconfig – > pastebin.com/raw.php?i=YJs2JnQx

如果你需要更多的信息,请不要犹豫,问我。

最好的祝福

最后,在docker0接口上打开端口3306解决了我的问题:

 iptables -t filter -A INPUT -p tcp -i docker0 --dport 3306 -j ACCEPT iptables -t filter -A OUTPUT -p tcp -o docker0 --dport 3306 -j ACCEPT 

我认为真正的答案是使用--service-ports docker-compose启动容器时使用--service-ports选项:

docker-compose run --service-ports db

…按照: https : //stackoverflow.com/questions/32360687/connect-to-docker-mysql-container-from-localhost/32407507#32407507