无法连接到在 docker 中运行的 MySQL

Posted

技术标签:

【中文标题】无法连接到在 docker 中运行的 MySQL【英文标题】:Can't connect to MySQL running in docker 【发布时间】:2021-02-15 08:39:02 【问题描述】:

我正在尝试使用一些旧的 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

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

我已尝试从 MySQL Workbench 和 JetBrains 的 DataGrip 进行连接,但均失败并出现类似错误:

与主节点的通信链接失败。没有找到 master 的活动连接。 java.io.EOFException: 流意外结束,从 4 读取 0 个字节(套接字已被服务器关闭)。

我试过了:

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

MySQL 版本为 5.6。

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

【问题讨论】:

你必须微调 yiur installer.sh,ever4rything 需要他的时间来启动,所以你需要暂停直到下一步。 @nbk 如果它不能在容器内工作,我会同意你的看法,但它可以工作。应用程序能够连接到容器内的数据库,但似乎没有发布端口。我也没有手动做任何事情,我只是从 bitnami 下载和运行安装程序,它安装了 apache、php 和 mysq。并且启动服务的脚本也来自bitnami,并且会一一正确启动服务(可以通过日志确认)。 docker 与映射端口的桥接器一起工作,因此当您尝试连接时,请查看wireshark 在您的 docker 中看到的内容,应该有连接尝试。当 te mappinhg 失败时,很难确定确切的原因。网络服务器是否运行且可访问? 是的,它正在运行并且可以从主机访问 所以端口 8080 ruzns 和 webwser 响应,端口 3307 上的 mysql 没有响应,您在 docker 内使用 mysql 客户端对其进行了测试,您是否安装了wireshrak 并看到了来自外部的 pqackages。 aöso ic 想到了什么检查 my.cnf [mysqld] bind-address= 【参考方案1】:

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

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

所以你必须控制和更改my.cnf中的以下参数

[mysqld] 
bind-address=0.0.0.0

这将允许从 每个 ip

访问

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

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

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

【讨论】:

这里还有一个补充:使用docker-compose 并结合几个现有图像(php:5.6.34-apache,mysql:5.6)被证明是更简单直接的解决方案。它们由相应的团队创建并可以使用,因此我花费的时间更少

以上是关于无法连接到在 docker 中运行的 MySQL的主要内容,如果未能解决你的问题,请参考以下文章

Spring boot JDBC无法连接到docker容器中的mysql

无法从Intellij连接到在docker容器中运行的mySql - “指定的数据库用户/密码组合被拒绝”

弹性beantalk docker应用程序无法连接到mysql

无法使用 JDBC 连接到 docker 中的本地 MySQL

无法连接到 Docker 内的 MySQL 服务器

无法从 docker 容器连接到 Localhost Mysql