最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Docker容器沒有權(quán)限寫入宿主機目錄的解決方案

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

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

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

下面是一個例子:

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

[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 用戶創(chuàng)建,而 jenkins user的uid為1000

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

sudo chown -R 1000:1000 /opt/jenkins

然后重啟容器,錯誤就沒有了。

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

說在前面

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

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

問題描述

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

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

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

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

一個非常常見的解決方案是從容器內(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$

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

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

第二種解決方案更簡潔,它將使用容器內(nèi)的正確所有權(quán)創(chuàng)建文件和目錄。Docker 提供了一個參數(shù)來設(shè)置容器內(nèi)用戶的用戶 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$

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

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

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

相關(guān)文章

  • 什么是docker Docker入門教程第一篇

    什么是docker Docker入門教程第一篇

    什么是docker?這篇文章主要為大家分享了Docker簡介與入門教程第一篇,感興趣的小伙伴們可以參考一下
    2016-10-10
  • docker運行項目的方法

    docker運行項目的方法

    在本篇文章里小編給大家分享的是關(guān)于docker運行項目的方法和實例,需要的朋友們學(xué)習(xí)參考下。
    2020-03-03
  • ubuntu系統(tǒng)使用docker gitlab 磁盤空間滿的問題及解決

    ubuntu系統(tǒng)使用docker gitlab 磁盤空間滿的問題及解決

    這篇文章主要介紹了ubuntu系統(tǒng)使用docker gitlab 磁盤空間滿的問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • 詳解基于docker搭建lanproxy內(nèi)網(wǎng)穿透服務(wù)

    詳解基于docker搭建lanproxy內(nèi)網(wǎng)穿透服務(wù)

    這篇文章主要介紹了詳解基于docker搭建lanproxy內(nèi)網(wǎng)穿透服務(wù),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-04-04
  • Docker?制作tomcat鏡像并部署項目的步驟

    Docker?制作tomcat鏡像并部署項目的步驟

    這篇文章主要介紹了Docker?制作tomcat鏡像并部署項目?,講解如何制作自己的tomcat鏡像,并使用tomcat部署項目,需要的朋友可以參考下
    2022-10-10
  • 記 -bash: docker-compose: command not found 的問題解決方法

    記 -bash: docker-compose: command not&nbs

    這篇文章主要介紹了記 -bash: docker-compose: command not found 的問題解決方法,本文給大家介紹的非常詳細對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2024-01-01
  • docker部署code-server的方法

    docker部署code-server的方法

    這篇文章主要介紹了docker部署code-server的方法,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-09-09
  • Docker如何實現(xiàn)修改Docker0網(wǎng)橋默認網(wǎng)段

    Docker如何實現(xiàn)修改Docker0網(wǎng)橋默認網(wǎng)段

    這篇文章主要介紹了Docker如何實現(xiàn)修改Docker0網(wǎng)橋默認網(wǎng)段,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-12-12
  • 在Docker環(huán)境中部署和運行One API的操作方法

    在Docker環(huán)境中部署和運行One API的操作方法

    隨著技術(shù)的發(fā)展,API 作為服務(wù)連接的橋梁,變得越來越重要,One API 是一種流行的 API 管理平臺,能夠幫助我們更好地管理、監(jiān)控和擴展 API 服務(wù),本文給大家介紹了如何在 Docker 環(huán)境中部署和運行 One API,需要的朋友可以參考下
    2024-11-11
  • docker如何刪除懸空鏡像

    docker如何刪除懸空鏡像

    文章介紹了如何使用Docker命令刪除懸空鏡像,以提高服務(wù)器空間利用率,通過使用docker image命令結(jié)合filter和awk工具,可以過濾出沒有Tag的鏡像,并將其刪除,總結(jié)了兩種方法,一種是通過管道和awk命令,另一種是使用更簡單的docker rmi命令
    2025-02-02

最新評論

北票市| 康平县| 横峰县| 南宁市| 武宣县| 舒城县| 哈巴河县| 全椒县| 新乐市| 洛阳市| 安塞县| 临猗县| 陆丰市| 博白县| 曲靖市| 宝山区| 新绛县| 永和县| 吉安市| 吉林省| 扬州市| 阳信县| 吉林市| 辽阳市| 中卫市| 丰城市| 麻阳| 永平县| 蓝山县| 福建省| 靖安县| 兰坪| 什邡市| 和林格尔县| 准格尔旗| 嘉祥县| 会昌县| 玉屏| 图木舒克市| 凉山| 望江县|