亚洲免费在线视频-亚洲啊v-久久免费精品视频-国产精品va-看片地址-成人在线视频网

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

Docker容器沒(méi)有權(quán)限寫(xiě)入宿主機(jī)目錄的解決方案

瀏覽:4日期:2024-10-31 11:58:57

在應(yīng)用docker容器的時(shí)候,更多的時(shí)候我們會(huì)把宿主機(jī)的目錄掛載到docker容器中。

在宿主機(jī)的文件夾權(quán)限隸屬于root時(shí),我們需要將文件夾的權(quán)限用戶(hù)進(jìn)行 chown 設(shè)置,才能保證目錄的內(nèi)容的正常寫(xiě)入,

下面是一個(gè)例子:

使用的是docker版本的jenkins,運(yùn)行后,出現(xiàn)如下錯(cuò)誤:

[root@localhost CICD]# docker logs -f jenkins touch: cannot touch ’/var/jenkins_home/copy_reference_file.log’: Permission deniedCan not write to /var/jenkins_home/copy_reference_file.log. Wrong volume permissions?

我jenkins掛載的目錄是 /opt/jenkins/xxxxx,root 用戶(hù)創(chuàng)建,而 jenkins user的uid為1000

所以需要進(jìn)行 chown 設(shè)置,如下:

sudo chown -R 1000:1000 /opt/jenkins

然后重啟容器,錯(cuò)誤就沒(méi)有了。

補(bǔ)充:介紹兩種從 Docker 容器寫(xiě)入卷時(shí)的文件權(quán)限處理方式

說(shuō)在前面

容器常常用作原生安裝工具的替代品。在主機(jī)上使用具有所需版本的容器要比使用過(guò)時(shí)的工具好的多。但是,只要容器與主機(jī)系統(tǒng)進(jìn)行交互,文件會(huì)留下錯(cuò)誤或損壞的權(quán)限。

幸運(yùn)的是,解決該問(wèn)題的方法并不需要使用腳本。

問(wèn)題描述

當(dāng)容器掛載一個(gè)本地目錄并將文件寫(xiě)入其中時(shí),其所有權(quán)由容器內(nèi)的用戶(hù)決定:

nicholas@host:~/source$ mkdir sourcenicholas@host:~/source$ docker run -it --rm --volume $(pwd):/source --workdir /source ubunturoot@a031d11c9515:/source# mkdir subdirroot@a031d11c9515:/source# touch subdir/newfileroot@a031d11c9515:/source# exitexitnicholas@host:~/source$ ls -lR.:total 4drwxr-xr-x 2 root root 4096 Jul 16 19:35 subdir ./subdir:total 0-rw-r--r-- 1 root root 0 Jul 16 19:35 newfilenicholas@host:~/source$ rm -rf subdir/rm: cannot remove ’subdir/newfile’: Permission denied

另外,您還可能無(wú)法刪除這些目錄和擁有錯(cuò)誤所有權(quán)的文件。

解決方案1:從容器中刪除

一個(gè)非常常見(jiàn)的解決方案是從容器內(nèi)部更改文件和目錄的所有權(quán):

nicholas@host:~/source$ docker run -it --rm --volume $(pwd):/source --workdir /source ubunturoot@d1c3bee8bb2b:/source# ls -altotal 12drwxrwxr-x 3 1000 1004 4096 Jul 16 19:35 .drwxr-xr-x 1 root root 4096 Jul 16 19:39 ..drwxr-xr-x 2 root root 4096 Jul 16 19:35 subdirroot@d1c3bee8bb2b:/source# chown 1000:1000 subdir/ -Rroot@d1c3bee8bb2b:/source# ls -ltotal 4drwxr-xr-x 2 1000 1000 4096 Jul 16 19:35 subdirroot@d1c3bee8bb2b:/source# exitexitnicholas@host:~/source$ ls -ltotal 4drwxr-xr-x 2 nicholas lpadmin 4096 Jul 16 19:35 subdirnicholas@host:~/source$

這種方法的缺點(diǎn)是需要添加額外的邏輯,以及您需要知道運(yùn)行該容器用戶(hù)的用戶(hù) ID 和組 ID。

解決方案2:創(chuàng)建擁有正確所有權(quán)的文件

第二種解決方案更簡(jiǎn)潔,它將使用容器內(nèi)的正確所有權(quán)創(chuàng)建文件和目錄。Docker 提供了一個(gè)參數(shù)來(lái)設(shè)置容器內(nèi)用戶(hù)的用戶(hù) ID 和組 ID:

nicholas@host:~/source$ docker run -it --rm --volume $(pwd):/source --workdir /source --user $(id -u):$(id -g) ubuntugroups: cannot find name for group ID 1004I have no name!@bf7f355f3b65:/source$ touch newfileI have no name!@bf7f355f3b65:/source$ exitexitnicholas@host:~/source$ ls -ltotal 4-rw-r--r-- 1 nicholas nicholas 0 Jul 16 19:42 newfiledrwxr-xr-x 2 nicholas lpadmin 4096 Jul 16 19:35 subdirnicholas@host:~/source$

這種方法可以很好的幫您解決用戶(hù) ID 和組 ID 的錯(cuò)誤。

請(qǐng)注意,出于安全目的,在容器內(nèi)以 root 身份運(yùn)行是最糟糕的做法。Dockerfile 應(yīng)始終使用 USER 指令從而避免直接使用 root 權(quán)限。

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持好吧啦網(wǎng)。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。

標(biāo)簽: Docker
相關(guān)文章:
主站蜘蛛池模板: 分享一个无毒不卡免费国产 | 中文字幕一区视频一线 | 久久综合给合久久狠狠狠97色69 | 国产亚洲人成网站在线观看不卡 | 亚洲qingse中文久久网 | 99久久国产综合精品网成人影院 | 日韩精品中文字幕视频一区 | 一级做a爰片久久毛片免费看 | 国产成人a视频在线观看 | 亚洲美色综合天天久久综合精品 | 亚洲一区二区三区精品视频 | 欧美极品欧美精品欧美视频 | 天天看有黄有色大片 | 成年人视频在线免费播放 | 国内自拍视频在线播放 | 手机在线亚洲 | 国产在线一区二区三区在线 | 性做久久久久久免费观看 | 美女扒开腿让男人桶 | 日韩三级免费看 | 一区二区三区免费视频播放器 | 洋老外米糕国产一区二区 | 九九欧美 | 久久一区二区三区99 | 日韩永久在线观看免费视频 | 91久久99热青草国产 | 国产日韩欧美在线观看不卡 | 成在线人永久免费播放视频 | 久久久久久免费精品视频 | 欧美视频一区在线观看 | 国产综合久久久久影院 | 男女国产视频 | 高h原耽肉汁动漫视频 | 婷婷色综合久久五月亚洲 | 高清一级片 | 欧美成人ass| 午夜爱爱毛片xxxx视频免费看 | 久99频这里只精品23热 视频 | 亚洲综合一区二区三区 | 久久久不卡国产精品一区二区 | 国产成人一区二区三区影院免费 |