国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院

首頁 > 服務器 > Web服務器 > 正文

詳解Docker Volume 之權限管理

2024-09-01 13:55:55
字體:
來源:轉載
供稿:網友

Volume數(shù)據(jù)卷是Docker的一個重要概念。數(shù)據(jù)卷是可供一個或多個容器使用的特殊目錄,可以為容器應用存儲提供有價值的特性:

  • 持久化數(shù)據(jù)與容器的生命周期解耦:在容器刪除之后數(shù)據(jù)卷中的內容可以保持。Docker 1.9之后引進的named volume(命名文件卷)可以更加方便地管理數(shù)據(jù)卷的生命周期;數(shù)據(jù)卷可以被獨立地創(chuàng)建和刪除。
  • 數(shù)據(jù)卷可以用于實現(xiàn)容器之間的數(shù)據(jù)共享
  • 可以支持不同類型的數(shù)據(jù)存儲實現(xiàn)

Docker缺省提供了對宿主機本地文件卷的支持,可以將宿主機的目錄掛載到容器之中。由于沒有容器分層文件系統(tǒng)帶來的性能損失,本地文件卷非常適合一些需要高性能數(shù)據(jù)訪問的場景,比如MySQL的數(shù)據(jù)庫文件的存儲。同時Docker支持通過volume plugin實現(xiàn)不同類型的數(shù)據(jù)卷,可以更加靈活解決不同應用負載的存儲需求。比如在阿里云容器服務中可以為容器提供基于云盤的塊存儲、基于OSSFS和NAS/NFS的共享文件存儲。

然而Docker數(shù)據(jù)卷的權限管理經常是非常令人困惑的。本文將結合實例給大家介紹Docker數(shù)據(jù)卷權限管理中的常見問題和解決方法。

從Jenkins掛載本地數(shù)據(jù)卷錯誤談起

最近的一個同事在利用容器運行Jenkins時遇到一個問題,其復現(xiàn)步驟如下:

注:如果是Windows/Mac需要登錄到Boot2docker虛擬機之上,而Linux無需如此。

docker-machine ssh default

啟動Jenkins官方鏡像,并檢查日志

docker run -d -p 8080:8080 -p 50000:50000 --name jenkins jenkinsdocker logs jenkins

我們可以發(fā)現(xiàn)"jenkins"容器日志顯示結果一切正常

然而為了持久化Jenkins配置數(shù)據(jù),當我們把宿主機當前目錄下的data文件夾掛載到容器中的目錄"/var/jenkins_home"的時候,問題出現(xiàn)了:

docker rm -f jenkinsdocker run -d -p 8080:8080 -p 50000:50000 -v $(pwd)/data:/var/jenkins_home --name jenkins jenkinsdocker logs jenkins

錯誤日志如下

touch: cannot touch ‘/var/jenkins_home/copy_reference_file.log': Permission denied
Can not write to /var/jenkins_home/copy_reference_file.log. Wrong volume permissions?

這是神馬情況?

我們檢查一下之前啟動方式的"/var/jenkins_home"目錄權限,查看Jenkins容器的當前用戶: 當前用戶是"jenkins"而且"/var/jenkins_home"目錄是屬于jenkins用戶擁有的

docker@default:~$ docker run -ti --rm --entrypoint="/bin/bash" jenkins -c "whoami && id"jenkinsuid=1000(jenkins) gid=1000(jenkins) groups=1000(jenkins)docker@default:~$ docker run -ti --rm --entrypoint="/bin/bash" jenkins -c "ls -la /var/jenkins_home"total 20drwxr-xr-x 2 jenkins jenkins 4096 Jun 5 08:39 .drwxr-xr-x 28 root  root  4096 May 24 16:43 ..-rw-r--r-- 1 jenkins jenkins 220 Nov 12 2014 .bash_logout-rw-r--r-- 1 jenkins jenkins 3515 Nov 12 2014 .bashrc-rw-r--r-- 1 jenkins jenkins 675 Nov 12 2014 .profile

而當映射本地數(shù)據(jù)卷時,/var/jenkins_home目錄的擁有者變成了root用戶

docker run -ti --rm -v $(pwd)/data:/var/jenkins_home --entrypoint="/bin/bash" jenkins -c "ls -la /var/jenkins_home"total 4drwxr-sr-x 2 root staff  40 Jun 5 08:32 .drwxr-xr-x 28 root root 4096 May 24 16:43 ..

這就解釋了為什么當"jenkins"用戶的進程訪問"/var/jenkins_home"目錄時,會出現(xiàn) Permission denied 的問題

我們再檢查一下宿主機上的數(shù)據(jù)卷目錄,當前路徑下"data"目錄的擁有者是"root",這是因為這個目錄是Docker進程缺省創(chuàng)建出來的。

docker@default:~$ ls -la datatotal 0drwxr-sr-x  2 root   staff      40 Jun 5 08:32 ./drwxr-sr-x  5 docker  staff     160 Jun 5 08:32 ../

發(fā)現(xiàn)問題之后,相應的解決方法也很簡單:把當前目錄的擁有者賦值給uid 1000,再啟動"jenkins"容器就一切正常了。

sudo chown -R 1000 datadocker start jenkins

這時利用瀏覽器訪問 "http://192.168.99.100:8080/" 就可以看到Jenkins的Web界面了。注:如無法訪問,可能需要通過docker-machine ip命令獲得當前Docker宿主機的IP地址。

當我們再進入容器內部查看"/var/jenkins_home"目錄的權限,其擁有者已經變成 "jenkins"

docker@default:~$ docker exec jenkins ls -la /var/jenkins_hometotal 24drwxr-sr-x 11 jenkins staff 340 Jun 5 09:00 .drwxr-xr-x 28 root  root 4096 May 24 16:43 ..drwxr-sr-x 3 jenkins staff  60 Jun 5 08:59 .java-rw-r--r-- 1 jenkins staff 289 Jun 5 08:59 copy_reference_file.log...

而有趣的是在宿主機上我們看到的 "data"目錄的擁有者是"docker",這是因為"docker"用戶在"boot2docker"宿主機上的uid也是"1000"。

docker@default:~$ ls -la datatotal 20drwxr-sr-x  2 docker  staff      40 Jun 5 11:55 ./drwxr-sr-x  6 docker  staff     180 Jun 5 11:55 ../...

這時我們已經可以知道:容器的本地數(shù)據(jù)卷中文件/目錄的權限是和宿主機上一致的,只是uid/gid在Docker容器和宿主機中可能映射為不同的用戶/組名稱。

在上文,我們使用了一個常見的技巧,即在宿主機上執(zhí)行chown命令時采用了uid而不是具體的用戶名,這樣就可以保證設置正確的擁有者。

問題雖然解決了,但思考并沒有結束。因為當使用本地數(shù)據(jù)卷時,Jenkins容器會依賴宿主機目錄權限的正確性,這會給自動化部署帶來額外的工作。有沒有方法讓Jenkins容器為數(shù)據(jù)卷自動地設置正確的權限呢?這個問題對很多以non-root方式運行的應用也都有借鑒意義。

為non-root應用正確地掛載本地數(shù)據(jù)卷

我們可以從萬能的stackoverflow.com找到很多相關的討論,其中一個非常有借鑒意義問答如下

http://stackoverflow.com/questions/23544282/what-is-the-best-way-to-manage-permissions-for-docker-shared-volumes

其中的基本思路有兩個:

一個是利用Data Container的方法在容器間共享數(shù)據(jù)卷。這樣就規(guī)避了解決宿主機上數(shù)據(jù)卷的權限問題。由于在1.9版本之后,Docker提供了named volume來取代純數(shù)據(jù)容器,我們還需要真正地解決這個問題。

另外一個思路就是讓容器中以root用戶啟動,在容器啟動腳本中利用"chown"命令來修正數(shù)據(jù)卷文件權限,之后切換到non-root用戶來執(zhí)行程序

我們來參照第二個思路來解決這個問題

下面是一個基于Jenkins鏡像的Dockerfile:它會切換到"root"用戶并在鏡像中添加"gosu"命令,和新的入口點"/entrypoint.sh"

FROM jenkins:latestUSER rootRUN GOSU_SHA=5ec5d23079e94aea5f7ed92ee8a1a34bbf64c2d4053dadf383992908a2f9dc8a / && curl -sSL -o /usr/local/bin/gosu "https://github.com/tianon/gosu/releases/download/1.9/gosu-$(dpkg --print-architecture)" / && chmod +x /usr/local/bin/gosu / && echo "$GOSU_SHA /usr/local/bin/gosu" | sha256sum -c - COPY entrypoint.sh /entrypoint.shENTRYPOINT ["/entrypoint.sh"]

注釋:gosu 是經常出現(xiàn)在官方Docker鏡像中的一個小工具。它是"su"和"sudo"命令的輕量級替代品,并解決了它們在tty和信號傳遞中的一些問題。

新入口點的"entrypoint.sh"的內容如下:它會為"JENKINS_HOME"目錄設置"jenkins"的擁有權限,并且再利用"gosu"命令切換到"jenkins"用戶來執(zhí)行"jenkins"應用。

#! /bin/bashset -echown -R 1000 "$JENKINS_HOME"exec gosu jenkins /bin/tini -- /usr/local/bin/jenkins.sh

您可以直接從 https://github.com/denverdino/docker-jenkins 獲得相關代碼,并構建自己的Jenkins鏡像。執(zhí)行命令如下:

git clone https://github.com/AliyunContainerService/docker-jenkinscd docker-jenkins/jenkinsdocker build -t denverdino/jenkins .

然后基于新鏡像啟動Jenkins容器

docker rm -f jenkinsdocker run -d -p 8080:8080 -p 50000:50000 -v $(pwd)/data:/var/jenkins_home --name jenkins denverdino/jenkins

總結

本文介紹了Docker數(shù)據(jù)卷的基本概念。針對non-root進程訪問本地數(shù)據(jù)卷出現(xiàn)的權限問題,我們給出了一個解決方案。我們計劃在未來為大家繼續(xù)總結在Docker數(shù)據(jù)卷上遇到的一些其他問題,

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到服務器教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院
国产www在线观看| 羞羞视频在线免费看| 亚洲v片在线观看| 在线观看的网站你懂的| 性国产高清在线观看| www.狠狠插| 国产主播色在线| 国产精品入口麻豆免费观看| 五月婷婷丁香激情| 国产网站免费看| 在线色视频观看| 国产专区在线播放| 国产日产一区二区三区| 亚洲国产精品区| 国产毛片毛片毛片| 国产精品乱码一区二区三区视频| 精品一区二区三区免费站| 日本成a人片在线观看| 久热免费在线视频| 国产色视频网站| 青娱乐在线视频观看| 国产三线在线| 国产在线播放av| 在线看黄网站| 国产区卡一卡二卡三乱码免费| 午夜小视频在线| 国产福利在线观看| 成人免费一区二区三区牛牛| av文字幕在线观看| 91国内精品久久久久| 九九热在线播放| 亚洲jjzzjjzz在线观看| 国产精品久久久高清免费| 另类视频在线| 天天插天天射| 俺来俺也去www色在线观看| 在线三级av| 91蜜桃在线视频| 国产日产精品久久久久久婷婷| 久久国产热视频| 青青草视频在线免费观看| 99久久国产视频| 国产精品入口麻豆高清| 国产一级大片| 国产欧美在线观看视频| 国产男女av| 国产美女在线免费观看| 国精一区二区三区| 国产麻豆精品一区二区三区v视界| 午夜小视频在线| 欧美精品一区二区三区免费| а√最新版地址在线天堂| 日本久久国产| 男人操女人免费网站| 久久精品免视着国产成人| 国产专区在线| 国产粉嫩一区二区三区在线观看| 6699久久国产精品免费| 一本久久精品| 国内精品免费一区二区三区| 国产美女视频网站| 国产精品久久一区二区三区不卡| 国产偷窥老熟盗摄视频| 精品99又大又爽又硬少妇毛片| 亚洲精品xxxxx| 国产免费福利网站| 在线午夜视频| 黄色免费av| 国产精品伦一区二区三区视频| 91黄色在线| 人人干人人插| 国产一卡2卡3卡4卡网站免费 | 精品一区二区在线欧美| av网站在线播放| 国产麻豆高清视频在线第一页| 国产精品日日爱| www.成人.com| 中文在线官网天堂| 午夜免费福利在线观看| 午夜影院在线免费观看| 国产网站免费观看| 狠狠综合久久久综合| 午夜在线不卡| 国产高清免费av在线| 国产在线视频福利| 四虎成人欧美精品在永久在线| 国产精品四虎| 天天操人人干| 白浆爆出在线观看| 在线观看的av| 精灵使的剑舞无删减版在线观看| 日本中文字幕视频在线| 黄色av免费在线| www在线视频观看| 日本在线天堂| 快射av在线播放一区| 日本啊v在线| 免费精品国产自产拍在| 青青草在线播放| 九九热在线播放| 免费观看v片在线观看| 久精品在线观看| 国内精品不卡| 中文字幕在线视频不卡| 国产麻豆精品高清在线播放| 91超碰在线免费| 国产写真视频在线观看| 国产区高清在线| √8天堂资源地址中文在线| 91麻豆免费在线视频| 99在线播放| 欧美精品久久久久久久小说| 九九热在线免费视频| 国产一级黄色片免费| 精品卡1卡2卡三卡免费网站| 97在线超碰| 人人干人人插| 国产麻豆综合视频在线观看| 国产一级网站视频在线| 国产午夜电影| 亚洲第一区视频| 国产九九在线| 在线āv视频| 国产卡1卡2卡三卡在线| 国产激情三区| а天堂8中文最新版在线官网| 国产免费麻豆视频| 国产福利一区二区在线精品| 亚洲成人福利| 国产视频在线播放| 男人操女人免费网站| 国产激情视频网址| www在线视频观看| 国产高清av在线| 四虎a级欧美在线观看| 中文字幕人成高视频| 四虎久久影院| 国产成人久久精品77777| 老鸭窝av在线| 伊人免费在线| 国产探花在线观看| 国产专区在线| 欧美人成在线观看网站高清| 国产95在线|亚洲| 成人精品福利| 六月天色婷婷| 日本福利午夜视频在线| 精品精品导航| ·天天天天操| 中文字幕色视频| 成 人免费视频播放| 热99re久久精品精品免费| 国产95在线|亚洲| 国产精品人人| 中文字幕亚洲免费| 国产乱视频在线观看播放| 人人澡人人爽| 日韩国产成人| 人人在线视频| 日本不卡影院| 老鸭窝av在线| 高潮毛片在线观看| 国产中文字幕av| 成人欧美亚洲| www.91在线播放| 久久国产精品黑丝| 超碰人人在线| 国产女人在线观看| 中文字幕av中文字幕| 国产精品冒白浆免费视频| 国产黄色av免费看| 精品电影在线| 麻豆国产在线视频| 午夜视频在线| 国产福利图片| 亚洲综合在线免费| jlzzjlzz欧美| 国产乱视频在线观看| 国产区成人精品视频| 国产精品bbw一区二区三区| 在线中文字幕第一页| av在线官网| 中文字幕在线免费| 国产高清在线| www在线观看播放免费视频日本| 狠狠干天天干| 91午夜在线| 欧美精品se| 国产福利在线视频| 热99re久久精品这里都是免费| 国产毛片毛片| 在线a人片免费观看视频| 国产精品一区牛牛影视| 国产成人精品实拍在线| www.成人.com| 国产精品国精产品一二| 久久综合精品视频| 精品久久亚洲一级α| 国产免费永久在线观看| 亚洲第一区视频|