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

标签 mysql docker lamp bitnami

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


我试过了:
  • 假设存在一些冲突,请使用映射到另一台主机的端口(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)。

    关于mysql - 无法连接到在docker中运行的MySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64649791/

    相关文章:

    php - 很简单的购物车,移除按钮

    php - 网站的 SQL 数据库存储有哪些替代方案?

    php - 使用 cvs 在 webapp 上作为一个组工作

    php - 无法在在线服务器上的 Lamp 中连接 mysql 和 php

    django - 您将如何在生产环境中运行 Postgres 服务器?

    INSERT INTO...ON DUPLICATE UPDATE 的 MySQL 索引

    mysql - Rails 应用程序生成 MySQL 负载,但现在触发了数据库访问

    mysql - 如何区分目标表和源表?

    docker - 使用Marathon在Docker Swarm上运行Docker容器?

    Docker和Host之间的进程任务结构