国产成人精品18p,天天干成人网,无码专区狠狠躁天天躁,美女脱精光隐私扒开免费观看

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

發(fā)布時(shí)間:2021-08-15 18:37 來(lái)源: 閱讀:0 作者:catoop 欄目: 服務(wù)器 歡迎投稿:712375056

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

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

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

使用的是docker版本的jenkins,運行后,出現如下錯誤:

[root@localhost CICD]# docker logs -f 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?

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

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

sudo chown -R 1000:1000 /opt/jenkins

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

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

說(shuō)在前面

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

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

問(wèn)題描述

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

nicholas@host:~/source$ mkdir source
nicholas@host:~/source$ docker run -it --rm --volume $(pwd):/source --workdir /source ubuntu
root@a031d11c9515:/source# mkdir subdir
root@a031d11c9515:/source# touch subdir/newfile
root@a031d11c9515:/source# exit
exit
nicholas@host:~/source$ ls -lR
.:
total 4
drwxr-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 newfile
nicholas@host:~/source$ rm -rf subdir/
rm: cannot remove 'subdir/newfile': Permission denied

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

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

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

nicholas@host:~/source$ docker run -it --rm --volume $(pwd):/source --workdir /source ubuntu
root@d1c3bee8bb2b:/source# ls -al
total 12
drwxrwxr-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 subdir
root@d1c3bee8bb2b:/source# chown 1000:1000 subdir/ -R
root@d1c3bee8bb2b:/source# ls -l
total 4
drwxr-xr-x 2 1000 1000 4096 Jul 16 19:35 subdir
root@d1c3bee8bb2b:/source# exit
exit
nicholas@host:~/source$ ls -l
total 4
drwxr-xr-x 2 nicholas lpadmin 4096 Jul 16 19:35 subdir
nicholas@host:~/source$

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

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

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

nicholas@host:~/source$ docker run -it --rm --volume $(pwd):/source --workdir /source --user $(id -u):$(id -g) ubuntu
groups: cannot find name for group ID 1004
I have no name!@bf7f355f3b65:/source$ touch newfile
I have no name!@bf7f355f3b65:/source$ exit
exit
nicholas@host:~/source$ ls -l
total 4
-rw-r--r-- 1 nicholas nicholas  0 Jul 16 19:42 newfile
drwxr-xr-x 2 nicholas lpadmin 4096 Jul 16 19:35 subdir
nicholas@host:~/source$

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

請注意,出于安全目的,在容器內以 root 身份運行是最糟糕的做法。Dockerfile 應始終使用 USER 指令從而避免直接使用 root 權限。

以上為個(gè)人經(jīng)驗,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自本網(wǎng)站內容采集于網(wǎng)絡(luò )互聯(lián)網(wǎng)轉載等其它媒體和分享為主,內容觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如侵犯了原作者的版權,請告知一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容,聯(lián)系我們QQ:712375056,同時(shí)歡迎投稿傳遞力量。

亚洲熟女少妇一区二区| 黄网在线观看免费网站| 天堂中文在线最新版地址| 男插女高潮一区二区| 性少妇MDMS丰满HDFLLM| 日日狠狠久久8888偷偷色|