当 Docker 容器无法连接到 MySQL 数据库时,可能是由多种原因导致的。以下是常见问题及解决方法:
docker ps
确保 MySQL 容器正在运行(状态为 "Up")。
docker network ls
docker inspect <network_name>
# 进入 MySQL 容器
docker exec -it mysql_container bash
# 在容器内测试连接
mysql -u root -p
-- 在 MySQL 中执行
CREATE USER 'username'@'%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON *.* TO 'username'@'%';
FLUSH PRIVILEGES;
确保 MySQL 配置允许远程连接:
# 在 my.cnf 或 my.ini 中
[mysqld]
bind-address = 0.0.0.0
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
如果从宿主机连接,确保端口正确映射:
docker run -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=password -d mysql
docker logs mysql_container
telnet
测试连接:docker exec -it app_container bash
apt-get update && apt-get install -y telnet
telnet mysql_container 3306
sudo ufw status
sudo ufw allow 3306
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 的问题。如果问题仍然存在,请提供具体的错误信息以便进一步分析。