插件窝 干货文章 docker无法连接mysql怎么办

docker无法连接mysql怎么办

MySQL Docker 容器 network 143    来源:    2025-04-29

Docker 无法连接 MySQL 问题解决方案

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

1. 检查 MySQL 容器是否正常运行

docker ps

确保 MySQL 容器状态为 "Up"。如果没有运行,尝试启动:

docker start [容器名/ID]

2. 检查网络连接

确认容器在同一网络

如果应用和 MySQL 是分开的容器,确保它们在同一个 Docker 网络中:

docker network ls
docker network inspect [网络名]

创建网络并连接容器

如果需要:

docker network create my-network
docker network connect my-network mysql-container
docker network connect my-network app-container

3. 检查 MySQL 配置

确保 MySQL 允许远程连接

进入 MySQL 容器:

docker exec -it mysql-container mysql -u root -p

执行以下 SQL:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'yourpassword';
FLUSH PRIVILEGES;

检查绑定地址

确保 MySQL 监听所有接口(0.0.0.0)而不仅仅是本地(127.0.0.1)。

my.cnf 中添加或修改:

[mysqld]
bind-address = 0.0.0.0

4. 检查端口映射

确保 MySQL 端口正确映射:

docker ps -a

查找 MySQL 容器的端口映射,类似:

0.0.0.0:3306->3306/tcp

如果没有正确映射,重新运行容器时添加 -p 3306:3306 参数。

5. 检查防火墙设置

如果宿主机有防火墙,确保 3306 端口开放:

sudo ufw allow 3306

6. 检查连接字符串

确保应用使用正确的连接参数: - 主机名:如果是同一 Docker 网络,使用容器名作为主机 - 端口:默认 3306 - 用户名和密码:与 MySQL 配置一致

示例连接字符串:

jdbc:mysql://mysql-container:3306/database?useSSL=false

7. 查看日志排查问题

检查 MySQL 容器日志:

docker logs mysql-container

检查应用容器日志:

docker logs app-container

8. 重新创建容器

如果问题持续,尝试重新创建 MySQL 容器:

docker stop mysql-container
docker rm mysql-container
docker run --name mysql-container -e MYSQL_ROOT_PASSWORD=yourpassword -p 3306:3306 -d mysql:latest

9. 使用 Docker Compose 的示例配置

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

  app:
    build: .
    depends_on:
      - db
    environment:
      DB_HOST: db
      DB_PORT: 3306
    networks:
      - my-network

networks:
  my-network:
    driver: bridge

volumes:
  db_data:

通过以上步骤,应该能够解决大多数 Docker 连接 MySQL 的问题。如果仍有问题,请提供具体的错误信息以便进一步诊断。