[英]Cannot connect to mysql in Docker container from host
我在我的 Mac 笔记本电脑上运行一个 Docker mysql 容器。 以前我能够使用 mysql 客户端从主机操作系统连接到它。 但是,不知何故它被删除了,现在在我重新创建它之后,我无法再连接到它。 我已经搜索了几十个类似的问题,但完全被难住了。
这是我创建它的方式:
docker container run --name mysql-zhxw-dev -p 3306:3306 --expose=3306 -v zhxw-local-db-:/var/lib/mysql -e MYSQL_ALLOW_EMPTY_PASSWORD=yes -d mysql:5.7.30
每次我从主机操作系统运行mysql -u root -h 127.0.0.1
时,我都会得到:
ERROR 2003 (HY000): Can't connect to MySQL server on '127.0.0.1' (61)
我可以登录容器,并从内部连接到 mysql:
docker container exec -it mysql-zhxw-dev bash
mysql -u root <-- connects fine
我试过了:
docker container exec
,安装vi
,编辑 /etc/mysql/mysql.conf.d/mysqld.cnf 并取消注释包含bind-address
的行。 我尝试了bind-address = 0.0.0.0
和bind-address = 127.0.0.1
,然后显然退出并运行docker container restart mysql-zhxw-dev
。-P 3306
指定要连接的端口-h localhost
、 -h 127.0.0.1
、 -h 0.0.0.0
连接,并省略-h
--protocol=TCP
我不知道还能尝试什么。
我在 docker-compose 中有一个带有 mysql 的模板,也许它可以帮助你。
docker-compose.yml
version: "3.2"
services:
mysql:
image: mysql:latest
ports:
- "3306:3306"
volumes:
- /path-persistent-volumen:/var/lib/mysql/
command: --default-authentication-plugin=mysql_native_password
restart: always
environment:
- MYSQL_ROOT_PASSWORD=password
原来 docker 一定是在一个奇怪的 state 中。 重新启动我的笔记本电脑解决了这个问题。
在重新启动之前,我尝试重新启动 Docker 桌面,但这并没有解决它。 只有完全重新启动才能解决它。
我确实注意到的一件事是在重新启动之前,当我运行docker container ls -a
时,除了我试图开始工作的一个 mysql 之外,没有其他容器。 我想我可能已经从一些清理命令中删除了它们。 重启后,我所有的容器都回来了。
我最近确实使用 Homebrew 升级了 docker,所以也许把它放在一个奇怪的 state 中。
此错误通常是由于与主机上的端口相关的问题而发生的。
试试这些东西:
-a
标志以附加模式启动容器docker inspect mysql-zhxw-dev
并检查 HostPort 和 HostIp 并尝试发现异常。-v 3308:3306
之类的其他内容。此外,这可能有助于https://stackoverflow.com/a/32361238/9586997
PS我已经复制并运行了您给出的相同命令,并且运行良好。
我在修改 docker 图像和容器配置后遇到了这个问题。 原来 MySQL 数据实例的本地副本已损坏。
删除此撰写文件中记录的 ./data 目录并重建工作。
撰写文件
# /docker/docker-compose.yml
---
services:
db:
container_name: 'wp-mysql'
image: 'mysql:5.7.37'
platform: linux/amd64
volumes:
- './data/mysql:/var/lib/mysql'
ports:
- "18766:3306"
environment:
MYSQL_ROOT_PASSWORD: somewordpress
MYSQL_DATABASE: wordpress_db
MYSQL_USER: wordpress_user
MYSQL_PASSWORD: wordpress_password
docker的重建命令
docker-compose -f "docker-compose.yml" up -d --build
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.