我正在尝试使用一些旧的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连接都失败,并出现类似错误:
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).
我试过了:
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)。
关于mysql - 无法连接到在docker中运行的MySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64649791/