You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker部署CodeIgniter应用连接本地MySQL被拒绝求助

解决Docker容器无法连接Linux Mint主机MySQL的问题

排查步骤与解决方案

1. 调整MySQL绑定地址

Linux下MySQL默认仅绑定127.0.0.1,会拒绝容器的跨网络连接。操作如下:

  • 打开MySQL配置文件(通常路径为/etc/mysql/mysql.conf.d/mysqld.cnf)
  • 找到bind-address项,修改为0.0.0.0(允许所有IP访问)
  • 重启MySQL服务:sudo systemctl restart mysql

2. 授权MySQL用户访问权限

默认root用户仅允许本地登录,需授权给容器所在网段或host.docker.internal对应IP:

  • 登录MySQL:mysql -u root -p
  • 执行授权命令(替换app_password为你的实际密码):
    GRANT ALL PRIVILEGES ON app_database_name.* TO 'root'@'%' IDENTIFIED BY 'app_password';
    FLUSH PRIVILEGES;
    
    若要更严格控制,可先在主机执行ping host.docker.internal获取IP,再授权给该特定IP:
    GRANT ALL PRIVILEGES ON app_database_name.* TO 'root'@'172.17.0.1' IDENTIFIED BY 'app_password';
    FLUSH PRIVILEGES;
    

3. 检查防火墙规则

Linux Mint的ufw防火墙可能拦截了3306端口:

  • 临时关闭防火墙测试:sudo ufw disable,若能连接则开放端口
  • 允许Docker网段访问3306:sudo ufw allow from 172.17.0.0/16 to any port 3306
  • 重启防火墙:sudo ufw reload

4. 验证容器内连通性

进入容器测试网络和MySQL连接:

  • 进入容器:docker exec -it my_app bash
  • 安装测试工具:apt update && apt install iputils-ping mysql-client
  • 执行ping host.docker.internal确认网络可达
  • 尝试连接MySQL:mysql -h host.docker.internal -u root -p,查看具体错误信息

5. 修正docker-compose.yml格式错误

你的配置文件存在缩进问题,可能导致部分配置失效,修正后:

version: "3.3"
services:
  my_app:
    container_name: my_app
    image: aspendigital/codeigniter:latest
    volumes:
      - .:/var/www/html
    restart: always
    ports:
      - "8008:80"
    extra_hosts:
      - "host.docker.internal:host-gateway"

内容的提问来源于stack exchange,提问作者Mathew

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 07:01:02