无法连接到 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).
我试过:
- 使用映射到另一台主机的端口(3306、3308、10123)假设存在一些冲突;
- 使用不同的 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)。
我正在尝试使用一些遗留 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).
我试过:
- 使用映射到另一台主机的端口(3306、3308、10123)假设存在一些冲突;
- 使用不同的 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)。