Docker安裝Mysql掛載目錄時報錯:Entrypoint script for MySQL Server 5.7.31-1debian10 started.
阿新 • • 發佈:2020-10-04
有幾種方法可以儲存在Docker容器中執行的應用程式使用的資料。
-
讓Docker管理您的資料庫資料的儲存,通過寫入資料庫檔案到磁碟上的主機系統使用自己的內部卷管理。這是預設設定,對使用者來說很簡單而且相當透明。缺點是,對於直接執行在主機系統(即外部容器)上的工具和應用程式,這些檔案可能很難找到。
-
在主機系統上(容器外部)建立一個數據目錄,並將其掛載到容器內部可見的目錄中。這將資料庫檔案放置在主機系統上的已知位置,並且使得主機系統上的工具和應用程式可以更容易地訪問這些檔案。缺點是使用者需要確保目錄存在,例如目錄許可權和主機系統上的其他安全機制被正確設定。
-
在您的主機系統中,在合適的捲上儲存一個數據目錄,例如
/my/own/datadir
-
啟動mysql容器。
docker run --name mysql03 -p 3306:3306 -v /my/own/datadir:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7.31
-
然後按照上面這種方式建立容器後,使用docker ps
檢視正在執行的容器,發現mysql沒有執行,再使用docker ps -a
檢視後,發現mysql容器剛一建立就exit了。
使用docker logs 容器id
檢視執行日誌,報錯內容如下:
2020-10-04 07:28:06+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 5.7.31-1debian10 started. find: '/var/lib/mysql/': Permission denied chown: changing ownership of '/var/lib/mysql/': Permission denied
很顯然,是mysql容器中/var/lib/mysql/
沒有許可權。
那麼目標就很明顯了,賦予容器這個許可權。
一般來說,無法訪問目錄,許可權拒絕。該問題通常在centos7下出現。或者一個容器啟動成功後,裡面的服務無法成功訪問,這是
因為centos7中的安全模組selinux把許可權禁掉了,一般的解決方案有以下兩種:
(1)臨時關閉selinux
直接在centos伺服器上執行以下命令即可。執行完成以後建議重新docker run。
etenforce 0
(2)給容器加許可權
在docker run時給該容器加許可權,加上以下引數即可:
--privileged=true
一般都推薦使用這種方式。