【问题标题】:Why is MYSQL_DATABASE env var being ignored by MySQL docker container?为什么 MySQL docker 容器会忽略 MYSQL_DATABASE env var?
【发布时间】:2019-09-29 01:40:31
【问题描述】:

我有以下 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_DATABASE 环境变量?

我在 Windows 10 上运行。

编辑:

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

【问题讨论】:

  • 你怎么知道它忽略了你的环境变量?
  • @RedCricket:因为 MYSQL_DATABASE 旨在设置数据库名称,但创建的数据库名为 'db' 而不是 'mydb'。然而事实证明这是一个缓存问题。使用 docker-compose up --force-recreate 运行只会加载之前创建的图像。如果我更改服务和容器名称,我会得到我想要的,但我现在需要一种方法来避免这个缓存问题。
  • 你在 Docker 容器中运行 mysql > show databases; 吗?
  • @ToanQuocHo:是的,我正在执行 docker exec 以进入正在运行的 mysql 容器。
  • 您解决了这个问题吗?我遇到了完全相同的问题

标签: mysql docker docker-compose


【解决方案1】:

来自https://github.com/docker-library/mysql/issues/180

重要的是要注意图像入口点脚本永远不会 对现有数据库的更改。如果挂载现有数据 目录到 var/lib/mysql,像 MYSQL_ROOT_PASSWORD 这样的选项将 没有效果

我的问题是该卷已经存在。当我使用docker-compose down -v 删除卷时 当我提出它时,它会创建数据库。

【讨论】:

    【解决方案2】:

    您应该使用--force-recreate 标志:

    --force-recreate           Recreate containers even if their configuration
                               and image haven't changed.
    

    【讨论】:

    • 我试过了。 --force-recreate 不能解决问题。
    猜你喜欢
    • 2021-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-06
    • 1970-01-01
    • 1970-01-01
    • 2017-01-16
    相关资源
    最近更新 更多