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

Docker中PHP、Adminer容器无法连接MySQL容器求助

问题排查与解决步骤

1. 确保容器处于同一网络

默认docker-compose会自动创建项目专属网络,但显式指定网络可避免潜在连通问题。修改你的docker-compose.yml,添加统一网络配置:

version: '3.1'

networks:
  app-network:
    driver: bridge

services:
  php:
    build: 
      context: .
      dockerfile: Dockerfile
    volumes:
      - ./html:/var/www/html
    ports:
      - 80:80
    networks:
      - app-network

  db:
    image: mysql:5.7
    volumes:
      - ./mysql:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: test
      MYSQL_USER: test
      MYSQL_PASSWORD: test
    ports:
      - 3360:3306
    networks:
      - app-network

  adminer:
    image: adminer
    restart: always
    ports:
      - 8080:8080
    networks:
      - app-network

保存后重新执行docker-compose up -d,确保三个容器都加入同一网络。

2. 修正MySQL用户访问权限

你创建的test用户默认仅允许localhost访问,而Adminer从容器内部连接时,来源是容器IP而非localhost。需要调整用户权限:

  • 进入MySQL容器:docker exec -it [你的db容器名称] mysql -uroot -proot
  • 执行授权SQL:
GRANT ALL PRIVILEGES ON test.* TO 'test'@'%' IDENTIFIED BY 'test';
FLUSH PRIVILEGES;

授权完成后,test用户即可从任意主机(包括其他容器)连接MySQL。

3. 验证容器间连通性

进入Adminer容器直接测试MySQL连接,定位问题环节:

  • 进入Adminer容器:docker exec -it [你的adminer容器名称] sh
  • 安装MySQL客户端(若容器内无此工具):apt update && apt install -y mysql-client
  • 测试连接:mysql -h db -u test -p test,输入密码test。若能成功连接,说明网络和权限无问题,可排查Adminer操作;若连接失败,根据错误提示进一步定位。

4. 确认MySQL服务完全就绪

日志显示ready for connections不代表初始化完全完成,首次启动MySQL容器需要一定时间加载数据。可等待30秒至1分钟后再尝试Adminer登录,或查看完整日志确认无初始化错误:docker logs [你的db容器名称]。

5. 检查MySQL监听端口

进入db容器,确认MySQL在全地址监听而非仅本地:

docker exec -it [你的db容器名称] netstat -tulpn | grep 3306

若输出显示0.0.0.0:3306,说明端口正常对外监听;若仅显示127.0.0.1:3306,需修改MySQL配置文件允许远程监听。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 21:45:46