mysql - 除非我更改 `mount` `target`,否则 Docker 容器会立即关闭
问题描述
我正在尝试使用mysql
带有指向单个数据库目录的挂载的映像启动 Docker 容器(因为我不希望我的项目中包含所有其他数据库和日志文件)。
我尝试了这些命令:
db=test
install -d db-data
docker run \
-d \
--rm \
--mount src=$(pwd)/db-data,target=/var/lib/mysql/$db,type=bind \
--name $db-db \
-p 33060:3306 \
-e MYSQL_ROOT_PASSWORD=root \
-e MYSQL_DATABASE=$db \
mysql
当我这样做时,容器会立即启动并终止。但是,如果我使用 的目标target=/var/lib/mysql
,仅删除/$db
,它可以工作,但这就是我要避免的。
解决方案
您不能在容器中的 /var/lib/mysql 下面有一个挂载。您必须为 /var/lib/mysql 创建一个挂载。
这是您面临的错误:
0 [ERROR] [MY-010457] [Server] --initialize specified but the data directory has files in it. Aborting.
0 [ERROR] [MY-013236] [Server] The designated data directory /var/lib/mysql/ is unusable. You can remove all files that the server added to it.
0 [ERROR] [MY-010119] [Server] Aborting
0 [System] [MY-010910] [Server] /usr/sbin/mysqld: Shutdown complete (mysqld 8.0.26) MySQL Community Server - GPL.
如果 /var/lib/mysql 在启动时没有完全填充,入口点将初始化 /var/lib/mysql 目录。如果其中已经有文件,这将失败,当您将文件/目录挂载到数据目录时就是这种情况。
推荐阅读
- android - 如何从我的 android 设备获取 iid、openudid 参数值?
- sql-server - 如何在临时表的新列中添加标识符“标志”,作为 SQL Server 2017 中 CTE 表达式的一部分?
- javascript - NodeJs 如何导出 SQLite 连接
- php - 现有系统的 Laravel restful api
- python - 为什么我的 python 代码会产生运行时错误
- react-native - React Native 无法解析模块 @react-navigation/native
- python - 如何平滑血管图像并填充不需要的孔
- artificial-intelligence - PPO 算法只收敛于一个动作
- java - 如何使用 `com.fasterxml.jackson.core.JsonParser` 确定 json 数组的大小
- bash - 使用 bash 格式化 .csv