[英]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
访问并且它可以访问数据库),除了我无法使用映射的 3307 端口从主机连接到 MySQL 的事实。
我试过从 MySQL Workbench 和 JetBrains 的 DataGrip 连接都失败了,并出现了类似的错误:
与主要的通信链路故障。 找不到主节点的活动连接。 java.io.EOFException:流意外结束,从 4 读取 0 个字节(套接字已被服务器关闭)。
我试过了:
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)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.