繁体   English   中英

无法从主机连接到 Docker 容器中的 mysql

[英]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

我试过了:

  • 省略命名卷
  • 指定密码
  • mysql各种版本,包括5.6和5.7
  • 使用docker container exec ,安装vi ,编辑 /etc/mysql/mysql.conf.d/mysqld.cnf 并取消注释包含bind-address的行。 我尝试了bind-address = 0.0.0.0bind-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 中。

此错误通常是由于与主机上的端口相关的问题而发生的。

试试这些东西:

  1. 检查容器的日志
  2. 使用-a标志以附加模式启动容器
  3. 运行docker inspect mysql-zhxw-dev并检查 HostPort 和 HostIp 并尝试发现异常。
  4. 您还可以将端口映射中的主机端口更改为-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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM