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

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM