[英]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.