无法从主机访问 mysql docker 容器

无法从主机访问 mysql docker 容器

我有一台安装了 docker 的 Debian 服务器,1.6.0上面有一个正在运行的官方 mysql 容器(https://registry.hub.docker.com/_/mysql/)。

我使用一个相当基本的防火墙配置,其中除 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服务器容器?

可以提供帮助的更多信息:

启动容器的 ansible 任务:

- 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

如果您需要更多信息,请随时询问我。

此致

答案1

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

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

答案2

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

docker-compose run --service-ports db

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

答案3

容器内的 mysqd.conf 文件:

/etc/mysql/mysql.conf.d/mysqld.cnf 

评论此文:

bind-address           = 127.0.0.1

将其添加到下面:

bind-address            = 0.0.0.0

然后重新启动mysql服务:

service mysql restart

然后启动容器:

docker run  -p hostip:3306:3306 -it <image> bash

更换主机使用您的主机的 IP 地址。

在主机中运行:

mysql --host=hostip -u root -p

相关内容