使用docker-compose启动MySQL容器失败,求技术支持
问题描述
尝试用docker-compose部署MySQL容器,单独执行docker run --name mysql-db -e MYSQL_ROOT_PASSWORD=password -p 3306:3306 -d mysql:latest时一切正常,但使用自定义docker-compose.yml执行docker-compose up --build时容器启动失败。
配置文件如下:
version: '3.8' services: mysql-db: container_name: mysql-db image: mysql:latest environment: - MYSQL_DATABASE='crm' - MYSQL_ROOT_PASSWORD='password' expose: - "3306" ports: - "3306:3306"
报错包含:时区文件加载警告、SQL语法错误(ERROR 1064 (42000))、日志提示root@localhost密码为空(已配置MYSQL_ROOT_PASSWORD='password')。
解决步骤
移除环境变量值的单引号:docker-compose的
environment列表中,值不需要额外加单引号,引号会被当作值的一部分传递给容器,引发两个核心问题:- 创建数据库时执行
CREATE DATABASE 'crm';,SQL语法错误(数据库名不能用单引号包裹)。 - root密码被设置为
'password'(带单引号),与预期的password不符,导致认证提示错误。
修改后的配置:
version: '3.8' services: mysql-db: container_name: mysql-db image: mysql:latest environment: - MYSQL_DATABASE=crm - MYSQL_ROOT_PASSWORD=password ports: - "3306:3306"- 创建数据库时执行
清理旧数据卷(关键):如果之前启动失败已经生成了错误的初始化数据卷,即使修改配置,MySQL会复用旧数据导致问题依旧。执行以下命令清理:
# 停止并删除容器及关联数据卷(会清除所有数据库数据,谨慎操作) docker-compose down -v解决时区警告(可选):添加时区环境变量消除警告,比如设置为上海时区:
environment: - MYSQL_DATABASE=crm - MYSQL_ROOT_PASSWORD=password - TZ=Asia/Shanghai
内容的提问来源于stack exchange,提问作者Damiens
相关产品推荐
相关产品推荐

