为什么MYSQL docker容器会忽略MYSQL_数据库环境变量?

为什么MYSQL docker容器会忽略MYSQL_数据库环境变量?,mysql,docker,docker-compose,Mysql,Docker,Docker Compose,我有以下docker-compose.yml version: "3.7" services: db: container_name: db image: mysql ports: - "3306:3306" environment: MYSQL_ROOT_PASSWORD: "mysql" MYSQL_DATABASE: "mydb" security_opt: - seccomp:unconfined

我有以下docker-compose.yml

version: "3.7"
services:
  db:
    container_name: db
    image: mysql
    ports:
      - "3306:3306"
    environment:
      MYSQL_ROOT_PASSWORD: "mysql"
      MYSQL_DATABASE: "mydb"
    security_opt:
      - seccomp:unconfined
    volumes:
      - ./supplied/init:/docker-entrypoint-initdb.d/:ro
当我运行“docker compose up”时,会看到:

正在重新创建数据库。。。完成
附加到数据库

如果我检查可用的数据库,我会看到:

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| db                 |
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
为什么它会忽略MYSQL\u数据库环境变量

我在Windows10上运行

编辑:

这看起来像是某种缓存问题。我更改了docker compose文件中的服务名称和容器名称,它开始工作…

您应该使用标志:

发件人:

重要的是要注意,图像入口点脚本永远不会 对现有数据库的更改。如果装载现有的数据 目录转换为var/lib/mysql,mysql\u ROOT\u PASSWORD等选项将 无效

我的问题是该卷已经存在。当我用
docker compose down-v删除卷时

当我提到它时,它会创建数据库。

你怎么知道它忽略了你的环境变量?@RedCricket:因为MYSQL\u数据库是用来设置数据库名的,但是创建的数据库名为“db”,而不是“mydb”。然而,事实证明这是一个缓存问题。使用docker compose up运行--强制重新创建只加载先前创建的图像。如果我更改了服务和容器名称,我会得到我想要的,但是我现在需要一种方法来避免这个缓存问题Docker容器内部?@Toankocho:是的,我正在做Docker exec以进入正在运行的mysql容器。你解决了这个问题吗?我的问题和我试过的完全一样--强制重新创建并不能解决问题。
--force-recreate           Recreate containers even if their configuration
                           and image haven't changed.