【问题标题】:Docker image extending the mysql image isn't running the initdb scripts扩展 mysql 映像的 Docker 映像未运行 initdb 脚本
【发布时间】:2016-05-04 09:49:34
【问题描述】:

mysql docker 镜像的文档说:

第一次启动容器时 [...] 它将执行 /docker-entrypoint-initdb.d 中的扩展名为 .sh 和 .sql 的文件。您可以通过将 SQL 转储安装到该目录中轻松填充您的 mysql 服务,并提供带有贡献数据的自定义图像。

所以一开始我是在我的docker-compose.yml

version: '2'
services:
  db:
    image: mysql:5.7
    volumes:
      - .:/docker-entrypoint-initdb.d:ro

当我运行docker-compose builddocker-compose up 时,创建了容器并执行了当前目录中的sql 文件。到目前为止一切顺利。

但是如果我想将这些容器部署到另一台机器上(使用docker-machine),将/docker-entrypoint-initdb.d 挂载为卷将不起作用,因为该机器将无法访问我机器的. 目录。

然后我尝试扩展mysql:5.7 图像:

FROM mysql:5.7
COPY ./*.sql /docker-entrypoint-initdb.d/

在我的docker-compose.yml 中执行此操作

version: '2'
services:
  db:
    build:
      context: .
      dockerfile: Dockerfile

但是,当我在第二台机器上运行 docker-compose builddocker-compose up 并尝试运行我的应用程序时,当前目录中的 *.sql 文件不会执行。我的表都没有创建。

为什么我的第二种方法不起作用?

编辑: 啊,等等。我问错了问题。问题不在于第二种方法不起作用,而在于第二种方法在 Virtualbox 中运行的本地 docker-machine 上运行时不起作用。当我在主机上使用第二种方法时(即不使用 docker-machine),第二种方法实际上有效。

【问题讨论】:

  • 您可以发布容器第一次运行时的日志吗?你所拥有的看起来不错,它可能很简单。
  • 啊,等等。我问错了问题。问题不在于第二种方法不起作用,而在于第二种方法在Virtualbox中运行的本地docker-machine上运行时不起作用。当我在主机上使用第二种方法时(即不使用docker-machine),第二种方法实际上有效。
  • 好的,你能更新一下问题吗,看看日志,看看发生了什么,还是不错的。它只会在容器第一次启动时运行 .sql 脚本,所以如果你在第一次运行后添加了脚本,它们将不会运行。
  • 我发现了问题。问题是我认为docker-compose rm -f 破坏了附加到容器的所有卷,但我错了。所以我认为第一个up:ed 容器实际上使用的是由更早的up 创建的数据库。所以 sql 文件没有运行,因为它实际上不是容器第一次启动。呃。感谢 Ken 为我指明了正确的方向。
  • 撰写的有趣行为。我相信 -v 旨在删除与 compose 容器关联的所有卷(如果它们是由 compose 创建的)。这是一个错误 Ken 还是 -v 只删除“命名”容器?

标签: mysql docker docker-compose docker-machine


【解决方案1】:

我发现了问题。问题是我认为docker-compose rm -f 销毁了任何附加到容器的卷,但我错了。所以我认为第一个 up:ed 容器实际上是在使用由更早的 up 创建的数据库。所以 sql 文件没有运行,因为它实际上并不是容器第一次启动。呃。感谢 Ken 为我指明了正确的方向。

事实证明,即使不使用 docker-compose rm -v 也会删除卷。我必须使用docker volume ls 列出它们,然后使用docker volume rm <volume> 手动删除它们。

【讨论】:

    【解决方案2】:

    清理卷的另一种特定于 Docker 的方法:

    docker system prune

    这将删除悬空的图像、容器、卷和网络。添加-a 也会删除过期的容器和当前未使用的图像。

    【讨论】:

      猜你喜欢
      • 2016-11-25
      • 2019-04-09
      • 2018-11-17
      • 2014-08-15
      • 1970-01-01
      • 1970-01-01
      • 2018-06-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多