Docker Compose环境变量无法修改MySQL用户凭证问题排查
问题
我通过以下docker-compose.yml启动MySQL容器:
version: '3.9' services: mysql_db: image: mysql environment: MYSQL_ROOT_PASSWORD: root123 MYSQL_USER: my_user_1 MYSQL_PASSWORD: pwd_1 restart: always volumes: - db_vol:/var/lib/mysql ports: - "3306:3306" - "33060:33060" volumes: db_vol:
但root密码并未修改为root123,默认密码root仍可使用;指定的my_user_1也未创建,反而存在user1。不过直接使用docker run命令启动容器时,环境变量可正常生效,能修改root密码并创建指定用户。我不想通过配置文件,希望用环境变量解决该问题,请问可能哪里出错了?
环境:Ubuntu 22.04.1,VSCode 1.75.1
原因分析与解决方案
- Docker卷已存在旧数据:MySQL容器仅在首次启动时会读取环境变量完成数据库初始化(包括设置root密码、创建指定用户)。你配置的命名卷
db_vol如果之前已经存在(比如之前启动过MySQL容器并生成了这个卷),容器会直接复用卷内的旧数据库文件,完全跳过环境变量的初始化逻辑,这就导致root密码还是旧值,用户也是之前创建的user1。 - 验证方式:执行
docker volume ls命令,查看列表中是否存在db_vol相关的卷名(注意Docker Compose会自动给命名卷加上项目目录前缀,比如项目目录叫mysql-demo,卷名就是mysql-demo_db_vol)。 - 解决步骤:
- 停止并移除当前容器:
docker-compose down - 删除旧的命名卷:
docker volume rm <实际卷名>(替换成你从docker volume ls查到的卷名) - 重新启动容器:
docker-compose up -d
- 停止并移除当前容器:
完成以上操作后,容器会重新初始化数据库,环境变量就能正常生效,设置你指定的root密码和用户my_user_1。
内容的提问来源于stack exchange,提问作者Sold Out
相关产品推荐
相关产品推荐

