第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

管理Docker共享卷權(quán)限的(最佳)方法是什么?

管理Docker共享卷權(quán)限的(最佳)方法是什么?

qq_花開花謝_0 2019-11-21 10:58:36
我已經(jīng)和Docker玩了一段時(shí)間,在處理持久性數(shù)據(jù)時(shí)繼續(xù)尋找相同的問題。我創(chuàng)建我的文件Dockerfile并公開一個(gè)卷,或使用--volumes-from它在容器中安裝主機(jī)文件夾。我應(yīng)該對(duì)主機(jī)上的共享卷應(yīng)用什么權(quán)限?我可以想到兩種選擇:到目前為止,我已經(jīng)授予所有人讀取/寫入訪問權(quán)限,因此我可以從Docker容器寫入該文件夾。將用戶從主機(jī)映射到容器,以便我可以分配更多的細(xì)化權(quán)限。不確定這是否可能,但尚未找到很多相關(guān)信息。到目前為止,我只能以某些用戶身份運(yùn)行容器:docker run -i -t -user="myuser" postgres,但是該用戶的UID與主機(jī)不同myuser,因此權(quán)限不起作用。另外,我不確定映射用戶是否會(huì)帶來一些安全風(fēng)險(xiǎn)。還有其他選擇嗎?你們?nèi)绾翁幚磉@個(gè)問題?
查看完整描述

3 回答

?
胡說叔叔

TA貢獻(xiàn)1804條經(jīng)驗(yàn) 獲得超8個(gè)贊

從Docker 1.9.0開始,Docker已命名卷來替換僅數(shù)據(jù)容器。在我如何思考docker內(nèi)部的數(shù)據(jù)的意義上,下面的答案以及我的鏈接博客文章仍然有價(jià)值,但是可以考慮使用命名卷而不是數(shù)據(jù)容器來實(shí)現(xiàn)下面描述的模式。


我相信解決這一問題的規(guī)范方法是使用僅數(shù)據(jù)容器。通過這種方法,所有對(duì)卷數(shù)據(jù)的訪問都是通過使用-volumes-from數(shù)據(jù)容器的容器進(jìn)行的,因此主機(jī)uid / gid無關(guān)緊要。


例如,文檔中給出的一個(gè)用例是備份數(shù)據(jù)量。為此,另一個(gè)容器用于通過進(jìn)行備份tar,它也用于-volumes-from裝載卷。因此,我認(rèn)為grok的關(guān)鍵點(diǎn)在于:與其考慮如何通過適當(dāng)?shù)臋?quán)限訪問主機(jī)上的數(shù)據(jù),不如考慮如何通過另一個(gè)容器來執(zhí)行所需的任何操作(備份,瀏覽等)。 。容器本身需要使用一致的uid / gids,但它們不需要映射到主機(jī)上的任何內(nèi)容,從而保持可移植性。


對(duì)于我來說,這也是相對(duì)較新的,但是如果您有特定的用例,請(qǐng)隨時(shí)發(fā)表評(píng)論,我將嘗試擴(kuò)展答案。


更新:對(duì)于注釋中的給定用例,您可能有一個(gè)some/graphite運(yùn)行石墨的圖像,以及一個(gè)some/graphitedata作為數(shù)據(jù)容器的圖像。因此,忽略端口等,Dockerfile映像some/graphitedata的類似于:


FROM debian:jessie

# add our user and group first to make sure their IDs get assigned consistently, regardless of other deps added later

RUN groupadd -r graphite \

  && useradd -r -g graphite graphite

RUN mkdir -p /data/graphite \

  && chown -R graphite:graphite /data/graphite

VOLUME /data/graphite

USER graphite

CMD ["echo", "Data container for graphite"]

構(gòu)建和創(chuàng)建數(shù)據(jù)容器:


docker build -t some/graphitedata Dockerfile

docker run --name graphitedata some/graphitedata

該some/graphiteDockerfile也應(yīng)該得到相同的UID /導(dǎo)報(bào),因此它可能是這個(gè)樣子:


FROM debian:jessie

# add our user and group first to make sure their IDs get assigned consistently, regardless of other deps added later

RUN groupadd -r graphite \

  && useradd -r -g graphite graphite

# ... graphite installation ...

VOLUME /data/graphite

USER graphite

CMD ["/bin/graphite"]

它將如下運(yùn)行:


docker run --volumes-from=graphitedata some/graphite

好的,現(xiàn)在這為我們的石墨容器和關(guān)聯(lián)的僅數(shù)據(jù)容器提供了正確的用戶/組(請(qǐng)注意,您也可以將some/graphite容器重新用于數(shù)據(jù)容器,在運(yùn)行時(shí)覆蓋entrypoing / cmd,但是將它們作為IMO更加清晰)。


現(xiàn)在,假設(shè)您要編輯數(shù)據(jù)文件夾中的內(nèi)容。因此,與其將卷綁定到主機(jī)上并在其上進(jìn)行編輯,不如創(chuàng)建一個(gè)新容器來完成該工作。叫它吧some/graphitetools。讓我們也創(chuàng)建適當(dāng)?shù)挠脩?組,就像some/graphite圖像一樣。


FROM debian:jessie

# add our user and group first to make sure their IDs get assigned consistently, regardless of other deps added later

RUN groupadd -r graphite \

  && useradd -r -g graphite graphite

VOLUME /data/graphite

USER graphite

CMD ["/bin/bash"]

您可以通過從Dockerfile 繼承some/graphite或some/graphitedata在Dockerfile中進(jìn)行此DRY ,或者代替重新創(chuàng)建新映像,而僅重用現(xiàn)有映像之一(必要時(shí)覆蓋entrypoint / cmd)。


現(xiàn)在,您只需運(yùn)行:


docker run -ti --rm --volumes-from=graphitedata some/graphitetools

然后vi /data/graphite/whatever.txt。這非常有效,因?yàn)樗腥萜鞯氖脩舳枷嗤?,并且具有匹配的uid / gid。


由于您從未/data/graphite從主機(jī)上進(jìn)行掛載,因此無需關(guān)心主機(jī)uid / gid如何映射到graphite和graphitetools容器中定義的uid / gid 。這些容器現(xiàn)在可以部署到任何主機(jī),并且它們將繼續(xù)正常運(yùn)行。


這樣做的好處是,它graphitetools可能具有各種有用的實(shí)用程序和腳本,您現(xiàn)在也可以以可移植的方式進(jìn)行部署。


更新2:寫完這個(gè)答案后,我決定寫一篇關(guān)于此方法的更完整的博客文章。希望對(duì)您有所幫助。


更新3:我更正了此答案,并添加了更多細(xì)節(jié)。它先前包含有關(guān)所有權(quán)和權(quán)限的一些錯(cuò)誤假設(shè)-所有權(quán)通常是在卷創(chuàng)建時(shí)即在數(shù)據(jù)容器中分配的,因?yàn)檫@是在創(chuàng)建卷時(shí)分配的??吹竭@個(gè)博客。不過,這不是必須的-您可以僅將數(shù)據(jù)容器用作“引用/句柄”,并通過入口處的chown在另一個(gè)容器中設(shè)置所有權(quán)/權(quán)限,最后以gosu身份以正確的用戶身份運(yùn)行命令。如果有人對(duì)此方法感興趣,請(qǐng)發(fā)表評(píng)論,我可以提供使用該方法的示例鏈接。


查看完整回答
反對(duì) 回復(fù) 2019-11-21
?
藍(lán)山帝景

TA貢獻(xiàn)1843條經(jīng)驗(yàn) 獲得超7個(gè)贊

可以在官方Redis圖像上以及通常在所有官方圖像中看到一個(gè)非常優(yōu)雅的解決方案。


分步介紹:


首先創(chuàng)建Redis用戶/組

如Dockerfile注釋所示:


首先添加我們的用戶和組,以確保一致分配其ID,而不考慮添加了任何依賴項(xiàng)


安裝古藪與Dockerfile

gosu是su/ 的替代方案,sudo用于從根用戶輕松降級(jí)。(Redis始終與redis用戶一起運(yùn)行)


配置/data音量并將其設(shè)置為workdir

通過使用VOLUME /data命令配置/ data卷,我們現(xiàn)在有了一個(gè)單獨(dú)的卷,該卷既可以是docker卷,也可以綁定安裝到主機(jī)目錄。


將其配置為workdir(WORKDIR /data)使其成為執(zhí)行命令的默認(rèn)目錄。


添加docker-entrypoint文件并使用默認(rèn)CMD redis-server將其設(shè)置為ENTRYPOINT

這意味著所有容器執(zhí)行將通過docker-entrypoint腳本運(yùn)行,并且默認(rèn)情況下要運(yùn)行的命令是redis-server。


docker-entrypoint是一個(gè)執(zhí)行簡(jiǎn)單功能的腳本:將當(dāng)前目錄(/ data)的所有權(quán)和降級(jí)從root更改為redisuser以運(yùn)行redis-server。(如果執(zhí)行的命令不是redis-server,它將直接運(yùn)行該命令。)


這具有以下效果


如果將/ data目錄綁定安裝到主機(jī),則docker-entrypoint將在用戶下運(yùn)行redis-server之前準(zhǔn)備用戶權(quán)限r(nóng)edis。


這使您可以輕松設(shè)置零設(shè)置,以便在任何卷配置下運(yùn)行容器。


當(dāng)然,如果需要在不同圖像之間共享卷,則需要確保它們使用相同的用戶ID /組ID,否則最新的容器將劫持前一個(gè)容器的用戶權(quán)限。


查看完整回答
反對(duì) 回復(fù) 2019-11-21
?
墨色風(fēng)雨

TA貢獻(xiàn)1853條經(jīng)驗(yàn) 獲得超6個(gè)贊

可以說這不是大多數(shù)情況下的最佳方法,但是尚未提及,因此也許會(huì)對(duì)某人有所幫助。


綁定掛載主機(jī)卷


Host folder FOOBAR is mounted in container /volume/FOOBAR


修改容器的啟動(dòng)腳本以找到您感興趣的卷的GID


$ TARGET_GID=$(stat -c "%g" /volume/FOOBAR)


確保您的用戶屬于具有此GID的組(您可能必須創(chuàng)建一個(gè)新組)。在此示例中,我假設(shè)我的軟件nobody在容器中時(shí)以用戶身份運(yùn)行,因此我想確保其nobody所屬組的組ID等于TARGET_GID


  EXISTS=$(cat /etc/group | grep $TARGET_GID | wc -l)


  # Create new group using target GID and add nobody user

  if [ $EXISTS == "0" ]; then

    groupadd -g $TARGET_GID tempgroup

    usermod -a -G tempgroup nobody

  else

    # GID exists, find group name and add

    GROUP=$(getent group $TARGET_GID | cut -d: -f1)

    usermod -a -G $GROUP nobody

  fi

我之所以這樣,是因?yàn)槲铱梢暂p松地修改主機(jī)卷上的組權(quán)限,并且知道這些更新的權(quán)限適用于Docker容器。發(fā)生這種情況時(shí),沒有對(duì)我的主機(jī)文件夾/文件進(jìn)行任何許可或所有權(quán)修改,這讓我很高興。


我不喜歡這樣,因?yàn)樗俣▽⒆约禾砑拥角『檬褂媚胍腉ID的容器內(nèi)的任意組中沒有危險(xiǎn)。它不能與USERDockerfile中的子句一起使用(除非我認(rèn)為該用戶具有root特權(quán))。此外,它還大叫黑客工作;-)


如果您想成為鐵桿,顯然可以通過多種方式擴(kuò)展它-例如,在任何子文件,多個(gè)卷等上搜索所有組。


查看完整回答
反對(duì) 回復(fù) 2019-11-21
  • 3 回答
  • 0 關(guān)注
  • 1066 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)