无法连接到 docker 中的 MySQL 运行

Can't connect to MySQL running in docker

我正在尝试使用一些遗留 LAMP 开发堆栈构建 docker 图像以用于开发目的。 基本上我正在拍摄 ubuntu 图像并安装 bitnami LAMP 堆栈。 这是我目前拥有的 Dockerfile:

FROM ubuntu

EXPOSE 80 443 3306

WORKDIR /opt

COPY setup.sh .
RUN chmod +x setup.sh
RUN ./setup.sh      # this bash script downloads and runs installer

CMD /opt/bitnami/ctlscript.sh start && tail -f /opt/bitnami/apache2/logs/access_log

那我运行那个容器是这样的:

docker run --name dev -d -p 8080:80 -p 3307:3306 -v "C:\dev\project:/opt/bitnami/apache2/htdocs" aburov/lamp5.6

一切都按预期工作(来自 c:\dev\project 的应用程序可以通过 localhost:8080 访问并且它可以访问数据库)除了我无法从主机连接到 MySQL 使用映射 3307 端口。

我已经尝试从 MySQL Workbench 和 JetBrains 的 DataGrip 连接失败并出现类似错误:

Communications link failure with primary. No active connection found for master. java.io.EOFException: unexpected end of stream, read 0 bytes from 4 (socket was closed by server).

我试过:

  1. 使用映射到另一台主机的端口(3306、3308、10123)假设存在一些冲突;
  2. 使用不同的 MySQL 驱动程序。

MySQL版本是5.6.

我错过了什么? 提前致谢!

检查端口是否正确映射并验证本地 mysqlclient 可以连接到服务器后,还有另一种可能性。

MySQL 处于 默认配置 作为安全措施,仅接受来自本地主机的访问。

所以你必须控制和更改my.cnf

中的以下参数
[mysqld] 
bind-address=0.0.0.0

这将允许从每个 ip

访问

此外,默认情况下 root 仅具有 localhost 的权限,因此不允许从其他主机连接到该用户。为了解决这个问题,我们可以从容器中执行以下 SQL 命令:

GRANT CREATE USER ON *.* TO 'root'@'%';
FLUSH PRIVILEGES;

另一种选择是创建单独的用户(通过从容器中运行对应的 SQL)。