MySQL-workbench和Docker无法连接到MySQL服务器'127.0.0.1' (61)。

4

我在 Mac 上使用 docker 搭建本地 web 环境,想使用 MySQL-workbench 访问 mysql 数据库,但是安装完 MySQL-workbench 后连接数据库时出现了错误信息。

Can't connect to MySQL server on '127.0.0.1' (61)

img

我尝试为 Docker 找到解决方案,但没有找到。

docker inspect pkbook_mysql_1

"NetworkSettings": {
            "Bridge": "",
            "SandboxID": "cb984bedd303958298621c1571482c7c06a2a326df021902c15a7955b8c26b2c",
            "HairpinMode": false,
            "LinkLocalIPv6Address": "",
            "LinkLocalIPv6PrefixLen": 0,
            "Ports": {
                "3306/tcp": null
            },
            "SandboxKey": "/var/run/docker/netns/cb984bedd303",
            "SecondaryIPAddresses": null,
            "SecondaryIPv6Addresses": null,
            "EndpointID": "",
            "Gateway": "",
            "GlobalIPv6Address": "",
            "GlobalIPv6PrefixLen": 0,
            "IPAddress": "",
            "IPPrefixLen": 0,
            "IPv6Gateway": "",
            "MacAddress": "",
            "Networks": {
                "publiquip_default": {
                    "IPAMConfig": null,
                    "Links": null,
                    "Aliases": [
                        "mysql",
                        "ee6b2dd46fb8"
                    ],
                    "NetworkID": "8809726a588595aea20989df3608ae6646f2e64aa928974469df34b52febe7a4",
                    "EndpointID": "f41cf7f7e42f4921393e13c7db9ce046c784c159ad0ff3c74d45ed788323d4b1",
                    "Gateway": "172.20.0.1",
                    "IPAddress": "172.20.0.4",
                    "IPPrefixLen": 16,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "MacAddress": "02:42:ac:14:00:04",
                    "DriverOpts": null
                }

docker ps

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                NAMES
e34b4dbad1e3        pkbook_joomla    "/entrypoint.sh apac…"   4 days ago          Up 5 hours          0.0.0.0:80->80/tcp   pkbook_joomla_1
ee6b2dd46fb8        mysql:5.6           "docker-entrypoint.s…"   6 days ago          Up 5 hours          3306/tcp             pkbook_mysql_1
0ccd811b7955        pkbook_gulp      "docker-entrypoint.s…"   6 days ago          Up 5 hours                               pkbook_gulp_1

尝试使用0.0.0.0而不是127.0.0.1。 - dfundako
请添加您用于运行MySQL的Docker命令。 - Isitar
mysql -u pkbook -ppkbook pkbook<pkbook.sql; 网站运行完美。 - wbdevlop
@dfundako:同样的问题 - wbdevlop
3个回答

7
您需要使用-p选项发布3306端口。
docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -p 3306:3306 mysql 

COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME com.docke 446 Lotfi 7u IPv4 0x1816959b5bbf7377 0t0 TCP 127.0.0.1:49218 (LISTEN) com.docke 450 Lotfi 15u IPv6 0x1816959b5bc04437 0t0 TCP *:80 (LISTEN) Code\x20H 1232 Lotfi 41u IPv4 0x1816959b5b8bf377 0t0 TCP 127.0.0.1:10288 (LISTEN) - wbdevlop
您似乎没有一个监听3306端口的Mysql,请确保您按照我的回答中提到的方式从docker发布了3306端口。 - Thomas Martin
现在请提供 lsof 和连接结果。 - Thomas Martin
Failed to Connect to MySQL at 127.0.0.1:3306 with user pkbook I did on docker I did docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=pkbook -p 3306:3306 mysql - wbdevlop
我遇到了这个错误 Access denied for user 'pkbook'@'172.17.0.1' (using password: YES)。我的数据库是pkbook,用户也是pkbook,密码是pkbook,为什么我要使用root? - wbdevlop
显示剩余16条评论

0

不要使用主机127.0.0.1,尝试输入容器名称和端口。

如果不起作用,请在终端中键入docker ps。(如果您在创建容器时没有指定名称,Docker将随机命名它)。如果容器正在运行,则应在列表中看到它。

然后检查IP和端口:

docker inspect [CONTAINER-NAME]

并在以下位置找到:

"NetworkSettings":

                "3306/tcp": [
                    {
                        "HostIp": "0.0.0.0",
                        "HostPort": "33082"
                    }
                ],
                "33060/tcp": null
            },

所以,在这种情况下,它是0.0.0.0:33082


我编辑了我的问题,并发布了来自docker inspect pkbook_mysql_1的结果。 - wbdevlop
看起来您没有发布端口。这与Thomas Martin所说的基本相同,但他称其为暴露端口,这是不同的。 https://dev59.com/AmEh5IYBdhLWcg3wtFX4 如果这不能帮助您,请告诉我您是如何启动容器的?通过docker命令还是docker-compose? - fr4gm3nt

-1

您需要设置允许从任何IP登录,使用MYSQL_ROOT_HOST=%

完整的Docker命令行如下:

>docker run --name mysql-server -e MYSQL_ROOT_HOST=% -e MYSQL_ROOT_PASSWORD=12345 -p 3306:3306 -d mysql/mysql-server

--name 表示容器名称 -d 表示 MySQL Docker 镜像 当 Docker 状态为 Up 3 minutes (healthy) 时,您可以轻松通过 MySQL Workbench 连接到数据库。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接