我試圖用mysql鏡像啟動一個Docker容器,掛載指向一個單一的資料庫目錄(因為我不希望我的專案中出現所有其他的資料庫和日志檔案)。
我嘗試了這些命令:
db=test
安裝 -d db-data
docker run
-d
--rm
--mount src=$(pwd)/db-data,target=/var/lib/mysql/$db, type=bind
--名稱 $db-db
-p 33060:3306
-e MYSQL_ROOT_PASSWORD=root
-e MYSQL_DATABASE=$db -e MYSQL_ROOT_PASSWORD=root
mysql
當我這樣做的時候,容器啟動并立即終止。但是如果我使用target=/var/lib/mysql的目標,只洗掉/$db,它就能作業,但這正是我想避免的。
uj5u.com熱心網友回復:
你必須在容器中沒有/var/lib/mysql下面的掛載。你將不得不為/var/lib/mysql創建一個掛載。
這就是你所面臨的錯誤:
這就是你所面臨的錯誤。
0 [ERROR] [MY-010457] [Server] --initialize specified but the data directory has files in it. 終止。
0 [ERROR] [MY-013236] [Server] 指定的資料目錄/var/lib/mysql/ 是不可用。你可以洗掉所有服務器添加到的檔案。
0 [ERROR] [MY-010119] [Server] Aborting
0 [System] [MY- 010910] [服務器] /usr/sbin/mysqld。關機完成(mysqld 8.0.26) MySQL社區服務器-GPL。
如果/var/lib/mysql在啟動時沒有被完全填充,入口將初始化/var/lib/mysql目錄。如果其中已經有檔案,這將會失敗,當你將一個檔案/目錄掛載到資料目錄中時就會出現這種情況。
uj5u.com熱心網友回復:
為了確保所有初始化都在容器上進行,你可以在創建容器后添加卷。
為了確保所有的初始化都在容器上進行,你可以在創建容器后添加卷。
docker run
-d
--rm
--name $db-db
--p 33060: 3306
-e MYSQL_ROOT_PASSWORD=root
-e MYSQL_DATABASE=$db
帳戶
- 提交你現有的容器(也就是從容器的變化中創建一個新的鏡像):
docker commit 5a8f89adeead newcontainername
- 用卷軸運行新的容器:
docker run -ti --mount src=$(pwd)/db-data,target=/var/lib/mysql/$db,type=bind newcontainername /bin/bash
- 啟動新的容器(你可以用docker ps -a找到它),并停止舊的容器(已經運行):
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/326375.html
標籤:
