欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時(shí)間:2021年03月24日 14:35:57   作者:catoop  
這篇文章主要介紹了Docker容器沒(méi)有權(quán)限寫(xiě)入宿主機(jī)目錄的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧

在應(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 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 設(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 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ú)法刪除這些目錄和擁有錯(cuò)誤所有權(quán)的文件。

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

一個(gè)非常常見(jiàn)的解決方案是從容器內(nèi)部更改文件和目錄的所有權(quá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)是需要添加額外的邏輯,以及您需要知道運(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) 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 的錯(cuò)誤。

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

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

相關(guān)文章

  • docker中容器的網(wǎng)絡(luò)配置常用命令詳解

    docker中容器的網(wǎng)絡(luò)配置常用命令詳解

    這篇文章主要介紹了docker中容器的網(wǎng)絡(luò)配置常用命令詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • docker搭建CMS點(diǎn)播系統(tǒng)帶播放器功能

    docker搭建CMS點(diǎn)播系統(tǒng)帶播放器功能

    熟悉docker的童鞋都知道,安裝是非常的便利的,也可以在線(xiàn)體驗(yàn)的,今天通過(guò)本文給大家介紹docker搭建CMS點(diǎn)播系統(tǒng)帶播放器功能,感興趣的朋友跟隨小編一起看看吧
    2021-05-05
  • 解決Docker容器沒(méi)有vim命令的方法

    解決Docker容器沒(méi)有vim命令的方法

    這篇文章主要給大家介紹了關(guān)于解決Docker容器沒(méi)有vim命令的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Docker容器具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • docker pure-ftp 搭建ftp服務(wù)器的方法

    docker pure-ftp 搭建ftp服務(wù)器的方法

    本篇文章主要介紹了docker pure-ftp 搭建ftp服務(wù)器的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-04-04
  • 基于Docker快速搭建ELK的方法

    基于Docker快速搭建ELK的方法

    這篇文章主要介紹了基于Docker快速搭建ELK的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • docker-compose中啟動(dòng)鏡像失敗的幾種解決方法

    docker-compose中啟動(dòng)鏡像失敗的幾種解決方法

    本文主要介紹了docker-compose中啟動(dòng)鏡像失敗的幾種解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • docker run 運(yùn)行容器自動(dòng)結(jié)束的解決

    docker run 運(yùn)行容器自動(dòng)結(jié)束的解決

    這篇文章主要介紹了docker run 運(yùn)行容器自動(dòng)結(jié)束的解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-11-11
  • 教你如何在windows?10家庭版上安裝docker

    教你如何在windows?10家庭版上安裝docker

    這篇文章主要介紹了如何在windows?10家庭版上安裝docker的步驟,本文分為五步通過(guò)圖文給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2021-12-12
  • centos下docker安裝及springboot遠(yuǎn)程發(fā)布docker的方法

    centos下docker安裝及springboot遠(yuǎn)程發(fā)布docker的方法

    這篇文章主要介紹了centos下docker安裝及springboot遠(yuǎn)程發(fā)布docker的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-04-04
  • 手動(dòng)構(gòu)建自己的docker容器鏡像實(shí)戰(zhàn)

    手動(dòng)構(gòu)建自己的docker容器鏡像實(shí)戰(zhàn)

    這篇文章主要介紹了如何手動(dòng)構(gòu)建自己的鏡像并上傳到鏡像倉(cāng)庫(kù)中,文中有詳細(xì)的代碼實(shí)例,需要的朋友可以參考閱讀
    2023-04-04

最新評(píng)論