You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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)。
  • 解决步骤:
    1. 停止并移除当前容器:docker-compose down
    2. 删除旧的命名卷:docker volume rm <实际卷名>(替换成你从docker volume ls查到的卷名)
    3. 重新启动容器:docker-compose up -d

完成以上操作后,容器会重新初始化数据库,环境变量就能正常生效,设置你指定的root密码和用户my_user_1。

内容的提问来源于stack exchange,提问作者Sold Out

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 14:55:28