1. 程式人生 > 實用技巧 >Docker安裝Mysql掛載目錄時報錯:Entrypoint script for MySQL Server 5.7.31-1debian10 started.

Docker安裝Mysql掛載目錄時報錯:Entrypoint script for MySQL Server 5.7.31-1debian10 started.

有幾種方法可以儲存在Docker容器中執行的應用程式使用的資料。

  • 讓Docker管理您的資料庫資料的儲存,通過寫入資料庫檔案到磁碟上的主機系統使用自己的內部卷管理。這是預設設定,對使用者來說很簡單而且相當透明。缺點是,對於直接執行在主機系統(即外部容器)上的工具和應用程式,這些檔案可能很難找到。

  • 在主機系統上(容器外部)建立一個數據目錄,並將其掛載到容器內部可見的目錄中。這將資料庫檔案放置在主機系統上的已知位置,並且使得主機系統上的工具和應用程式可以更容易地訪問這些檔案。缺點是使用者需要確保目錄存在,例如目錄許可權和主機系統上的其他安全機制被正確設定。

    1. 在您的主機系統中,在合適的捲上儲存一個數據目錄,例如/my/own/datadir

    2. 啟動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

一般都推薦使用這種方式。