我有一个运行在官方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