无法从Docker外部连接容器内的MariaDB问题求助
无法连接Docker中运行的MariaDB容器问题
问题背景
我在Windows Docker Desktop中通过docker-compose配置了MariaDB服务,容器显示运行正常,但多次尝试用HeidiSQL连接均失败。
Docker Compose配置
database: image: mariadb:latest container_name: mariadb_db hostname: mariadb_db ports: - "54327:5432" restart: always environment: MYSQL_ROOT_PASSWORD: password MYSQL_DATABASE: jwt-auth-app MYSQL_USER: root MYSQL_PASSWORD: password volumes: - db_data:/var/lib/mysql networks: - app_net
连接尝试(HeidiSQL)
HeidiSQL连接参数设置:
- 主机:127.0.0.1
- 端口:54327
- 用户:root
- 密码:password
- 目标数据库:jwt-auth-app
连接请求无法建立,提示连接失败。
容器运行状态
容器状态显示为Up,端口映射为0.0.0.0:54327->5432/tcp,无异常退出或重启记录。
解决步骤
1. 修正端口映射错误
MariaDB默认监听3306端口,但你的配置中将容器内的5432端口(PostgreSQL默认端口)映射到了宿主机54327,这是核心问题。
- 修改docker-compose的
ports字段为:ports: - "54327:3306" - 重启容器:
docker-compose down && docker-compose up -d
2. 清理冗余环境变量
你同时设置了MYSQL_USER: root和MYSQL_ROOT_PASSWORD,可能引发权限冲突。建议保留root用户的配置即可:
- 移除以下两行环境变量:
MYSQL_USER: root MYSQL_PASSWORD: password
3. 重新配置HeidiSQL连接
修正端口后,HeidiSQL参数保持:
- 主机:127.0.0.1
- 端口:54327
- 用户:root
- 密码:password
- 数据库:jwt-auth-app
重新尝试连接。
4. 验证容器内服务状态
如果仍无法连接,进入容器确认MariaDB是否正常监听3306端口:
docker exec -it mariadb_db bash # 进入容器后执行 netstat -tulpn | grep mysqld
若输出包含0.0.0.0:3306,说明服务正常监听。
5. 检查Windows防火墙
确保Windows防火墙允许宿主机54327端口的入站连接,可临时关闭防火墙测试是否能连接。
内容的提问来源于stack exchange,提问作者user3574492
相关产品推荐
相关产品推荐

