Go+MySQL开发的CRUD RESTful API Docker化部署报错求解
问题排查与修复方案
1. MySQL容器启动失败修复
错误原因:MySQL官方镜像规则限制,MYSQL_USER、MYSQL_PASSWORD两个环境变量仅用于创建普通权限账号,不能将MYSQL_USER设置为root,root账号的密码仅通过MYSQL_ROOT_PASSWORD参数控制。
修复方案二选一:
- 方案1:修改项目根目录下的
.env文件,将DB_USER参数值改为非root的普通用户名(例如webapi_user),MySQL启动时会自动创建该用户并授予配置的数据库权限 - 方案2:如果确定要使用root账号连接数据库,直接删除
docker-compose.yaml中webapi-mysql服务下的MYSQL_USER、MYSQL_PASSWORD两行环境变量配置即可
2. Web API数据库连接失败修复
错误原因:当前Web API的数据库连接配置中地址填写为127.0.0.1:3306,Docker容器内的127.0.0.1指向容器自身,无法解析到同网络下的MySQL容器。
修复方案:
修改Web API的数据库连接配置(通常为.env文件或项目配置文件):
- 数据库地址(对应配置项
DB_HOST)改为MySQL服务名webapi-mysql(或MySQL容器名db_mysql,同Docker网络下两个名称均可正常解析) - 数据库端口改为MySQL容器内部端口
3306,容器间通信不需要使用宿主机映射的3308端口
可选优化(避免偶发连接失败)
depends_on配置仅控制容器启动顺序,不会等待MySQL完全初始化就绪后再启动Web API,建议补充健康检查配置,避免偶发的连接拒绝问题,修改后的核心配置示例如下:
services: app: # 原有配置保持不变 depends_on: webapi-mysql: condition: service_healthy webapi-mysql: # 原有配置保持不变 healthcheck: test: ["CMD", "mysqladmin" ,"ping", "-h", "localhost", "-u${DB_USER}", "-p${DB_PASSWORD}"] timeout: 5s retries: 10
内容的提问来源于stack exchange,提问作者Saan Classes
相关产品推荐
相关产品推荐

