[英]How to resolve --initialize specified but the data directory has files in it. on laradock mysql container
[英]docker-compose volume question and error --initialize specified but the data directory has files in it. Aborting
我有一个使用 mysql docker-image 的 spring-boot 项目,所以我不需要下载 mysql 基准工作。 由于其他原因,我不得不重新开始,所以我创建了一个新项目,该项目使用我之前使用的相同 mysql docker 图像。 我的 docker-compose.yml mysql 服务看起来像这样
version: "3.7"
services:
db:
image: mysql:5.7
command: --lower_case_table_names=1
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: farming_db
MYSQL_USER: root
MYSQL_PASSWORD: root
restart: always
volumes:
- "./database/farming_db/:/var/lib/mysql" #local
- farming_db:/var/lib/mysql/data #docker
ports:
- "3306:3306"
container_name: farming_mysql
networks:
- backend-network
当我运行docker-compose up
这是错误:
Attaching to farming_mysql, farming_server_springboot_1
farming_mysql | 2021-03-18 07:03:20+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 5.7.33-1debian10 started.
farming_mysql | 2021-03-18 07:03:20+00:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql'
farming_mysql | 2021-03-18 07:03:20+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 5.7.33-1debian10 started.
farming_mysql | 2021-03-18 07:03:21+00:00 [Note] [Entrypoint]: Initializing database files
farming_mysql | 2021-03-18T07:03:21.058436Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server opti
on (see documentation for more details).
farming_mysql | 2021-03-18T07:03:21.063630Z 0 [ERROR] --initialize specified but the data directory has files in it. Aborting.
farming_mysql | 2021-03-18T07:03:21.063710Z 0 [ERROR] Aborting
farming_mysql |
farming_mysql exited with code 1
springboot_1 |
我知道我的目录不是空的。 我正在尝试将“./database/farming_db/:/var/lib/mysql”和“farming_db:/var/lib/mysql/data”都用作卷目录。 我认为问题出在后一个目录上,因为前一个目录是空的。 我在删除后一个目录中的内容时遇到问题,因为我不知道如何访问它。
所以这就是我尝试过的:
我删除了所有容器,然后删除了所有卷。 docker volume prune
但没有用。
我搜索了我可以执行rm -rf /usr/local/var/mysql
但我不知道在哪里可以执行此命令,因为容器根本无法正常运行。
我删除了 mysql 映像,然后再次运行docker-compose up
。 这似乎从某个地方拉了一个新的 mysql 图像? 但我仍然得到同样的错误。 我猜卷目录与 docker 映像本身无关。
我从 docker-compose 中删除了“-farming_db:/var/lib/mysql/data #docker”行。 但同样的错误仍在发生!
我正在使用Windows10。
我的问题:
此行表明 mysql 容器将数据存储在与docker-compose.yml
相同的目录中的目录database
中:
volumes:
- "./database/farming_db/:/var/lib/mysql" #local
这种卷不是由 Docker 管理的,它只是文件系统中的一个目录,这就是docker volume prune
不起作用的原因。 我知道,因为它以相对或绝对的“路径”开头。
另一个卷, farming_db
,由 Docker 管理。 我知道,因为它以一个简单的名称开头。 这种卷由 Docker 管理并用prune
删除。
所以,回答:
docker-compose.yml
相同的目录中,您可以删除该database
文件夹。/var/lib/mysql
的那个仍然存在。 MySQL 将所有文件保存在此目录中,任何其他子目录都是数据库。docker-compose
隐藏了很多细节。MYSQL_USER
应该不同于root
。您可以让 Docker 管理整个卷,创建一个单独的卷来保存所有数据,在这种情况下,我将其命名为mysql_data :
volumes:
- mysql_data:/var/lib/mysql
或者,您可以进一步探索docker run
等效命令来使用它:
docker run -d --name mysql \
-e MYSQL_ROOT_PASSWORD=root \
-e MYSQL_DATABASE=farming_db \
-e MYSQL_USER=myuser \
-e MYSQL_PASSWORD=mypass \
-v mysql_data:/var/lib/mysql \
-p 3306:3306 \
mysql:5.7
运行docker system prune --volumes
这通过删除所有未使用的容器来释放 memory。 有时,由于 memory 限制,可能会出现上述问题
一般来说,我清空了卷的数据目录,只是更改了 MySQL 的版本。 所以分步骤:
- 空卷目录内容
- 将 docker-compose.yml mysql 版本从 5.7 修改为 5.7.16
作为 vencedor 的回答,它对我有用。 如果有人需要使用 mysql 5.7,您可以在 docker-compose.yml 中将这些行添加到您的数据库服务中:
- /etc/group:/etc/group:ro
- /etc/passwd:/etc/passwd:ro
user: "1000:1000"
我使用 docker-compose 运行 mysql 映像并遇到错误。 我使用以下配置来设置音量。 -./mysql/data:/var/lib/mysql/data
然后我把它改成下面的,错误就解决了。 -./mysql:/var/lib/mysql
我在我的 Windows 系统上发现,虽然我的本地卷 (ie/db) 看起来是空的,但实际上并非如此。 我最终从 bash shell 运行ls -la
在它显示一个 .sock 文件的同一文件夹中。 一旦我删除( rm -f *.sock
)并运行docker-compose up --build
它似乎正确安装了卷。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.