首页 > 解决方案 > 除非我更改 `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,它可以工作,但这就是我要避免的。

标签: mysqldocker

解决方案


您不能在容器中的 /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 目录。如果其中已经有文件,这将失败,当您将文件/目录挂载到数据目录时就是这种情况。


推荐阅读