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
相关产品推荐
相关产品推荐

