婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > 詳解Docker Volume 之權限管理

詳解Docker Volume 之權限管理

熱門標簽:北京人工外呼系統廠家 哈爾濱400電話去哪辦理 話術外呼系統 燃氣管線地圖標注顏色 400電話申請要什么條件 西柏坡地圖標注 廣東如何申請400電話 i智能電話機器人yeta 寧波400電話辦理對企業的意義

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

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

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

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

從Jenkins掛載本地數據卷錯誤談起

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

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

docker-machine ssh default

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

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

我們可以發現"jenkins"容器日志顯示結果一切正常

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

docker rm -f jenkins
docker run -d -p 8080:8080 -p 50000:50000 -v $(pwd)/data:/var/jenkins_home --name jenkins jenkins
docker 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"
jenkins
uid=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 20
drwxr-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

而當映射本地數據卷時,/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 4
drwxr-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"目錄時,會出現 Permission denied 的問題

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

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

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

sudo chown -R 1000 data
docker 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_home
total 24
drwxr-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 data
total 20
drwxr-sr-x  2 docker  staff      40 Jun 5 11:55 ./
drwxr-sr-x  6 docker  staff     180 Jun 5 11:55 ../
...

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

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

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

為non-root應用正確地掛載本地數據卷

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

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

其中的基本思路有兩個:

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

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

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

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

FROM jenkins:latest
USER root
RUN 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.sh
ENTRYPOINT ["/entrypoint.sh"]

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

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

#! /bin/bash
set -e
chown -R 1000 "$JENKINS_HOME"
exec gosu jenkins /bin/tini -- /usr/local/bin/jenkins.sh

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

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

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

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

總結

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

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

標簽:西藏 張家口 襄陽 巴中 湘潭 開封 阜陽 珠海

巨人網絡通訊聲明:本文標題《詳解Docker Volume 之權限管理》,本文關鍵詞  詳解,Docker,Volume,之,權限,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《詳解Docker Volume 之權限管理》相關的同類信息!
  • 本頁收集關于詳解Docker Volume 之權限管理的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    午夜久久久久久| 欧美片网站yy| va亚洲va日韩不卡在线观看| 欧美日韩国产精选| 国产日产欧产精品推荐色 | 91久久精品国产91性色tv| 91精品国产全国免费观看| 亚洲欧洲综合另类| 国产一区二区免费看| 日韩免费在线观看| 国产大陆精品国产| 国产精品国产成人国产三级| av一二三不卡影片| 亚洲乱码中文字幕| 欧美最猛性xxxxx直播| 亚洲一区av在线| 91精品久久久久久久99蜜桃| 日韩不卡手机在线v区| 欧美videos中文字幕| 日本vs亚洲vs韩国一区三区二区 | 美女视频网站黄色亚洲| 777xxx欧美| 麻豆精品视频在线观看免费| 久久网站最新地址| 欧美在线视频不卡| 精品在线亚洲视频| 国产精品黄色在线观看| 欧美精品三级在线观看| 国产高清不卡一区| 一区二区三区四区中文字幕| 91精选在线观看| 成人午夜av电影| 亚洲福利视频三区| 久久综合国产精品| 欧美日韩不卡在线| 99视频国产精品| 久久av中文字幕片| 亚洲午夜免费视频| 久久天天做天天爱综合色| 欧美三级视频在线观看| 国产成人av资源| 日本美女视频一区二区| 亚洲色图另类专区| 久久精品日韩一区二区三区| 欧美精品视频www在线观看| 色综合天天做天天爱| 国产一区二区在线免费观看| 亚洲va在线va天堂| 一区二区中文字幕在线| 精品欧美一区二区在线观看 | 欧美区视频在线观看| 91在线无精精品入口| 国产精品一品视频| 九九视频精品免费| 日韩黄色在线观看| 亚洲制服欧美中文字幕中文字幕| 欧美国产一区在线| 久久久久久夜精品精品免费| 91精品国产乱码久久蜜臀| 欧美图区在线视频| 97超碰欧美中文字幕| 高清成人免费视频| 国产乱色国产精品免费视频| 蜜臀va亚洲va欧美va天堂| 香蕉成人伊视频在线观看| 一区二区三区高清| 亚洲三级视频在线观看| 一区二区视频在线看| 亚洲免费观看在线视频| 国产精品久久久久毛片软件| 国产欧美日韩卡一| 国产精品欧美极品| 国产精品久久久久久户外露出| 国产欧美综合在线观看第十页| 欧美精品一区二区三区蜜桃| 精品久久一区二区三区| 2023国产一二三区日本精品2022| 精品日韩一区二区三区免费视频| 久久久国产一区二区三区四区小说| 久久综合久久综合亚洲| 中文字幕欧美区| 亚洲精选在线视频| 午夜精品福利一区二区蜜股av| 日韩成人伦理电影在线观看| 久久国产精品第一页| 国产尤物一区二区在线| 成人动漫精品一区二区| 91久久一区二区| 日韩一级精品视频在线观看| 久久蜜桃av一区精品变态类天堂| 国产精品丝袜在线| 亚洲第一激情av| 精品一区二区av| 91视频精品在这里| 久久久91精品国产一区二区三区| 亚洲精品一区二区三区蜜桃下载 | 日日摸夜夜添夜夜添国产精品 | 日韩国产高清影视| 国产精品乡下勾搭老头1| 91蜜桃免费观看视频| 欧美日韩不卡一区| 国产日韩视频一区二区三区| 亚洲国产精品一区二区www在线| 奇米精品一区二区三区四区| 成人国产电影网| 日韩一区二区三区精品视频| 国产精品第一页第二页第三页| 亚洲精品写真福利| 国内外成人在线视频| 色又黄又爽网站www久久| 337p粉嫩大胆噜噜噜噜噜91av| 亚洲一区视频在线| av亚洲产国偷v产偷v自拍| 日韩精品一区二区在线| 亚洲色图欧美偷拍| 国产精品99久久久久久似苏梦涵| 欧美日韩一区二区在线视频| 国产精品美女久久久久久| 日韩高清不卡一区二区三区| 色综合久久久久久久久久久| 久久蜜桃一区二区| 麻豆视频一区二区| 欧美色精品天天在线观看视频| 亚洲欧美在线另类| 成人免费毛片app| 精品久久久久久久久久久久久久久久久| 亚洲欧美综合另类在线卡通| 国产一区二区三区| 精品精品欲导航| 五月婷婷久久综合| 欧美视频一区二区三区| 亚洲人成伊人成综合网小说| 成人久久18免费网站麻豆| 国产欧美日产一区| 国产成人av一区| 国产欧美日韩在线看| 国产一区高清在线| 26uuu久久综合| 国产一区二区免费在线| 久久久五月婷婷| 成人午夜大片免费观看| 国产精品视频一二三区| 国产999精品久久久久久| 久久综合色婷婷| 成人看片黄a免费看在线| 国产精品乱码一区二区三区软件 | 欧美肥妇free| 午夜精品爽啪视频| 欧美三级视频在线| 午夜欧美大尺度福利影院在线看 | 色哟哟国产精品免费观看| 亚洲色图色小说| 在线观看精品一区| 亚洲综合丝袜美腿| 欧美视频一区二区三区四区| 日韩成人免费在线| 欧美一区二区三区在线观看| 亚洲电影一区二区三区| 在线播放中文一区| 亚洲午夜成aⅴ人片| 在线播放日韩导航| 久久精品国产一区二区三区免费看| 欧美成人vps| 高清在线观看日韩| 性欧美大战久久久久久久久| 精品国产伦一区二区三区观看体验 | 91在线无精精品入口| 国产精品你懂的| 色一情一乱一乱一91av| 五月激情丁香一区二区三区| 精品免费日韩av| 欧美日韩精品一区二区天天拍小说| 国产精品久久久久久久蜜臀| 91视频国产资源| 激情图区综合网| 国产精品乱码一区二三区小蝌蚪| 欧美色视频在线| 美腿丝袜亚洲综合| 综合色天天鬼久久鬼色| 欧美二区三区的天堂| 成人99免费视频| 日韩二区在线观看| 国产清纯美女被跳蛋高潮一区二区久久w | 国产.欧美.日韩| 天堂在线一区二区| 国产精品蜜臀在线观看| 欧美一卡2卡3卡4卡| 色综合av在线| 国产精品影音先锋| 午夜精品久久久久影视| 国产亚洲一区二区在线观看| 欧美乱妇23p| 色噜噜狠狠一区二区三区果冻| 九九**精品视频免费播放| 亚洲一二三四在线| 国产精品视频免费| 久久网站最新地址| 精品国产a毛片| 日韩欧美视频在线| 欧美午夜片在线观看|