mysql - docker-compose up 无效模式 /docker-entrypoint-initdb.d/ - 无法为服务数据库创建容器
问题描述
我必须使用 docker-compose up 来启动数据库。我们为此所需的一切都已经提供,并且适用于我的合作伙伴。同时我有以下问题。(我正在使用 Mac OS Catalina btw)每次我尝试使用 docker-compose up 时都会发生以下错误
码头工人组成
创建 ziegel24_database_1 ... 错误
错误:ziegel24_database_1 无法为服务数据库创建容器:无效模式:/docker-entrypoint-initdb.d/
错误:数据库无法为服务数据库创建容器:无效模式:/docker-entrypoint-initdb.d/ 错误:启动项目时遇到错误。
docker-compose.yml 如下
version: "3.1"
services:
database:
image: mysql:5.7
volumes:
- ./mysql/db/entrypoint:/docker-entrypoint-initdb.d/
ports:
- "3308:3306"
environment:
- "MYSQL_ROOT_PASSWORD=geheim"
- "MYSQL_DATABASE=Ziegel24"
我已经检查过我的 docker compose 和 engine 是否是正确的版本。(Mysql 使用较新的版本,但由于 docker 创建了一个新数据库,它会提取我被告知所需的 sql 版本)
我也试图找到所说的 docker-entrypoint-initdb.d目录,但即使在我的整台计算机上运行 find 也没有给出结果,所以我猜整个目录不存在?
有什么方法可以手动下载它还是包含在我错误地没有安装的包中?
编辑 我已经意识到 docker-entrypoint-initdb.d 无论如何都不应该在我的计算机上,而是在 mysql:5.7 图像中。我仍然不知道确切的错误是什么以及如何解决它,但是是的,这是新的。
由于我在搜索错误时没有找到任何帮助,所以我来这里寻求帮助。
解决方案
卷的简短语法是(HOST:CONTAINER)
or(HOST:CONTAINER:ro)
如果指定了访问模式。如果主机路径包含冒号 ( :
)CONTAINER
则被解释为访问模式。
在您的情况下./mysql/db/entrypoint
是相对路径,docker 将其扩展为完整路径。如果此完整路径包含冒号,/docker-entrypoint-initdb.d/
则认为访问模式明显无效(允许的值为ro
and rw
),因此会出错。
这可能不是您的情况,但我可以在 Ubuntu 14.04.5 LTS 上使用 Docker 版本 18.04.0-ce、构建 3d479c0 和 docker-compose 版本 1.21.0、构建 5920eb0 重现上述行为。
希望这可以帮助。
推荐阅读
- wordpress - 通过 API 更新自定义字段不起作用
- vue.js - watch 和 $watch 的区别
- gstreamer - 如何检测一个漏斗插件来源已在 gstreamer 管道中结束?
- c++ - 为什么 std::reverse() 不反转字符串?
- python - 如何使类继承自Python中的任何对象
- c++ - 在嵌套循环中使用 for auto
- telegram - 一些电报机器人(例如终极投票机器人)能够让用户不得不再次“启动”它。这是如何在 API 中完成的?
- sql - 内联表值函数以“用户”身份执行
- java - 函数无法被 Frida 钩住
- c++ - 比较函数中的 FMA 指令破坏了严格的弱排序属性