系統城裝機大師 - 唯一官網:www.farandoo.com!

當前位置:首頁 > server > anz > 詳細頁面

Docker創建容器時目錄權限踩坑

時間:2020-03-05來源:電腦系統城作者:電腦系統城

昨天寫項目時需要用到Mysql的衍生版本percona, 就想用Doker來安裝.結果踩了一晚上坑, 今早終于解決. 現記錄在此.
這個坑原因是我對linux的目錄權限問題不敏感導致的. 我的系統是ubuntu16.04, 運行 docker pull percona 拉取鏡像時一切正常.

Docker創建容器時目錄權限踩坑

拉取完后,輸入 docker images查看所有鏡像, 顯示正常:

Docker創建容器時目錄權限踩坑

然后我創建容器,命令為(執行時不要有換行):


 
  1. docker create --name percona -v /data/mysql-data:/var/lib/mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root percona:lates

這個命令的意思是我創建一個名為percona的容器, 然后把我本地的/data/mysql-data目錄映射到docker容器中的/var/lib/mysql目錄 并指定3306端口,然后設數據庫root用戶密碼也為root,最后的percona:latest是指定我上面拉取的版本.

因為docker容器中的數據庫只是一個鏡像,可以理解為并不是真實存在的,映射到我本地目錄的作用就是docker往/var/lib/mysql目錄存儲的數據都可以同步存儲到我的本地/data/mysql-data目錄. 這樣保證了數據不丟失,而且方便我本地操作.

命令的參數不了解的可以看下官方文檔或者隨便搜個docker視頻教程, 都有解釋. 然后我開啟此容器, docker start percona. 開啟完后查詢所有運行中的容器docker ps, 這時候出問題了:

Docker創建容器時目錄權限踩坑

為空,即沒有查到運行中的容器... 然后我查了下所有的容器,包括運行的和沒運行的的. docker ps -a, 顯示如下:

Docker創建容器時目錄權限踩坑

原來是端口沒有綁定成功, 所以沒有運行!, 每次運行就自動exited

這時我查看了一下docker日志, 輸入命令 docker logs 容器id, 顯示如下:

Docker創建容器時目錄權限踩坑

注: 這里的71是我此容器的container_id的開頭前兩個數字, docker支持這種簡化寫法.

日志報錯說我沒有對容器中/var/lib/mysql目錄下的創建和寫權限.
現在找到這個問題原因了, 可是搜了一晚上都沒有解決, 不得不說網上的一些不負責任的水貼是真的坑!
終于在早上找了解決辦法:
即檢查我本地目錄的所有者和docker容器中的/var/lib/mysql目錄的所有者是否為同一個用戶.


 
  1. docker run -ti --rm --entrypoint="/bin/bash" percona -c "whoami && id"
  2. 此命令的作用是查看容器的所有者, 顯示為:

    Docker創建容器時目錄權限踩坑

    然后輸入(不能換行):

    
     
  3. docker run -ti --rm -v /data/mysql-data:/var/lib/mysql --entrypoint="/bin/bash" percona -c "ls -la /var/lib/mysql"
  4. 此命令的作用是查看映射本地數據卷時, 此目錄的擁有者

    Docker創建容器時目錄權限踩坑

    原因就出在這里, 這就是為什么mysql用戶訪問docker中的目錄時, 會報權限錯誤! 因為 本地映射目錄的主人是root用戶, 而docker容器中/var/lib/mysql目錄的主人是mysql用戶,uid為999!
    然后解決方法就是, 把當前目錄的擁有者賦值給uid 999即mysql用戶, 再重新啟動容器

    Docker創建容器時目錄權限踩坑

    問題解決了! 浪費了一晚上時間, 不得不說, linux的權限控制知識還要加深!

    到此這篇關于Docker創建容器時目錄權限踩坑的文章就介紹到這了,更多相關Docker創建容器目錄權限內容請搜索我們以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持我們!

分享到:

相關信息

系統教程欄目

欄目熱門教程

人氣教程排行

站長推薦

熱門系統下載

jlzzjlzz亚洲乱熟在线播放