插件窝 干货文章 docker连接mysql失败怎么办

docker连接mysql失败怎么办

MySQL Docker 容器 network 964    来源:    2025-05-02

Docker 连接 MySQL 失败的解决方案

当 Docker 容器无法连接到 MySQL 数据库时,可能是由多种原因导致的。以下是常见问题及解决方法:

常见问题排查

1. 检查 MySQL 容器是否运行

docker ps

确保 MySQL 容器正在运行(状态为 "Up")。

2. 检查网络连接

  • 确保应用容器和 MySQL 容器在同一个 Docker 网络中
  • 检查网络配置:
docker network ls
docker inspect <network_name>

3. 验证 MySQL 服务是否可访问

# 进入 MySQL 容器
docker exec -it mysql_container bash

# 在容器内测试连接
mysql -u root -p

常见解决方案

1. 确保使用正确的连接参数

  • 主机名:如果是容器间连接,使用容器名称作为主机名
  • 端口:确认 MySQL 容器暴露的端口
  • 用户名/密码:确保使用正确的凭据

2. 检查 MySQL 用户权限

-- 在 MySQL 中执行
CREATE USER 'username'@'%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON *.* TO 'username'@'%';
FLUSH PRIVILEGES;

3. 检查 MySQL 绑定地址

确保 MySQL 配置允许远程连接:

# 在 my.cnf 或 my.ini 中
[mysqld]
bind-address = 0.0.0.0

4. 使用 Docker 网络别名

docker network create my-network
docker run --name mysql --network my-network -e MYSQL_ROOT_PASSWORD=password -d mysql
docker run --network my-network --network-alias app my-app

5. 检查端口映射

如果从宿主机连接,确保端口正确映射:

docker run -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=password -d mysql

调试技巧

  1. 检查容器日志:
docker logs mysql_container
  1. 使用 telnet 测试连接:
docker exec -it app_container bash
apt-get update && apt-get install -y telnet
telnet mysql_container 3306
  1. 检查防火墙设置:
sudo ufw status
sudo ufw allow 3306

示例 docker-compose 配置

version: '3'
services:
  db:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: rootpassword
      MYSQL_DATABASE: mydb
      MYSQL_USER: user
      MYSQL_PASSWORD: password
    ports:
      - "3306:3306"
    volumes:
      - mysql_data:/var/lib/mysql
    networks:
      - my-network

  app:
    build: .
    depends_on:
      - db
    environment:
      DB_HOST: db
      DB_PORT: 3306
      DB_USER: user
      DB_PASSWORD: password
      DB_NAME: mydb
    networks:
      - my-network

networks:
  my-network:
    driver: bridge

volumes:
  mysql_data:

通过以上步骤,您应该能够诊断并解决 Docker 连接 MySQL 的问题。如果问题仍然存在,请提供具体的错误信息以便进一步分析。