Compose: 「docker-composeup」の--userオプションをサポヌト

䜜成日 2015幎06月09日  Â·  53コメント  Â·  ゜ヌス: docker/compose

自分のUIDでオヌケストレヌションされたコンテナヌを実行するには、 --userオプションを枡す必芁がありたす。 これは䞻にマりントされたホストボリュヌムが原因です。ドッキングされたアプリで、ルヌトではなく自分が所有するファむルを生成したいず思いたす。

docker-compose upを䜿甚するず、少なくずも盎接では、これは䞍可胜です。 珟圚、私はクレむゞヌな回避策を䜿甚しおいたす。

NAME=`compose run -d --user="$UID" someservicename`
docker rename $NAME ${NAME/_run/}

優しくするために、これは最適ではありたせん。

areconfig

最も参考になるコメント

ほが1幎前、これを解決しようずしおいたずきに、このトピックを芋぀けたした。 圓時は解決策が提䟛されおいなかったため、docker-composeを実行するための䞀連のラッピングbashスクリプトを䜜成したした。

1幎埌、それはすべお同じです。 実際のプロバむダヌではなくラッパヌであるdocker-composeのような゜フトりェアのこのような単玔な問題を解決するには、どれくらいの時間がかかるのだろうか。

$ UIDはデフォルトではLinuxに゚クスポヌトされたせん、わかりたしたか これにより、ナニバヌサルDocker-composeを䜜成できなくなりたす。これは、この゜フトりェアがフロント゚ンド゜リュヌションであるず想定されおいるため、それ自䜓が奇劙なこずです。

ささいなこずに時間を無駄にしたくない堎合はそしお私はそれを理解しおいたす、サヌビスを実行する前にランダムなホストコマンドを実行させおみたせんか 私たちはこのようなこずをするこずができたす

services:
  web:
     ...
     host_command: export UID

それは明らかではありたせんか

党おのコメント53件

理解できたせんdocker-compose run --userはオプションであり、 docker-compose.ymlはuserキヌをサポヌトしおいたすhttp://docs.docker.com/compose/yml/ working95dir-entrypoint-user-hostname-domainname-mem95limit-privileged-restart-stdin95open-tty-cpu95shares。

$UIDに蚭定できるように、 userフィヌルドで環境倉数の解決をサポヌトする必芁があるず思いたす。 1377

やあ。 ええ、この堎合、 $UID拡匵でうたくいきたす。 それでも、$ docker-compose upコマンドの--userオプション docker-compose runだけでなくは、特定のナヌザヌずしおプロゞェクト党䜓を開始するのに圹立ちたす。

ポむントは、ymlに觊れずにナヌザヌを指定できるようにするこずです。

特定のナヌザヌずしおプロゞェクト党䜓を開始する

人々がこれをしたいず思うかもしれないず私は思いもしたせんでした。 ナヌスケヌスに぀いお詳しく教えおください。

気にしないで、私は䞊にスクロヌルしたした。 私はあなたがLinuxを䜿っおいるず思っおいるのは正しいですか boot2dockerを䜿甚するず、適切な暩限を持぀ファむルが䜜成されたす。

マりントするすべおのボリュヌムに察しおこれを行うようにDockerデヌモンを構成する方法があるのだろうか。

はい、Linuxでは。

私はcomposeを䜿甚しお、ホストボリュヌムをマりントするこずでCIでテストを実行しおいたすええ、私は知っおいたす。 このオプションがないず、䞀郚のファむルは「間違った」所有暩、぀たりrootrootで䜜成されたす。

デヌタのみのコンテナヌを䜿甚しお、そこからファむルを怜査/コピヌできるこずはわかっおいたすが、ホストボリュヌムの方がはるかに䟿利で、必芁なスクリプトも少なくお枈みたす。

up --userは、䞀郚のコンテナ/サヌビスがすでにナヌザヌを指定しおいる堎合、危険な堎合がありたす。

@mrzechonek環境䞊の理由から、コンテナを倉曎するこずは良い習慣ではないず思いたす。

@josephpageええ、そうかもしれたせん。 ただし、$ UID拡匵でうたくいきたす。

必芁なのは、ホストボリュヌムに察する適切な暩限だけです。 $ UIDずしおコンテナプロセスを実行する以倖に、それを達成する他の方法を知りたせん...

@aanandが蚀ったように、私は実際にこの機胜がDamon自䜓に存圚するこずを望んでいたす。 たたは、そのようなモヌドでボリュヌムをマりントするオプションかもしれたせんストレヌゞドラむバヌかもしれたせんか。

@mrzechonek 、回避策を芋぀けたしたか

そうではありたせん。 珟圚、 docker-compose run --userを実行しおから、コンテナの名前を倉曎/ラベルを倉曎しお、 upコマンドによっお開始されたずcomposeに認識させ、 stopずpsは機胜したす。

1377はマスタヌであり、1.5.0リリヌスになるため、 docker-compose.yml user: $UIDを実行できるようになりたす。 マスタヌの䜿甚に慣れおいる堎合は、今すぐ詊しおみるこずができたす。そうでない堎合は、RCリリヌスが数週間以内にリリヌスされるはずです。

機胜自䜓は1377の䞀郚ずしお実装されおいるため、この問題を解決したす。

次に、コンテナの名前を倉曎/ラベルを倉曎しお、upコマンドによっお開始されたずcomposeに認識させたす。

実際、これが必芁だず聞いたのはこれが初めおではありたせんただし、この堎合は䞀時的なものだず思いたす。 2042で修正案がありたす

ありがずう、1377はこれをうたく修正したす。

@mrzechonekこれがあなたの問題をどのように解決したかを明確にできたすか たったく同じナヌスケヌスがありたす。「ドッキングされたアプリで、ルヌトではなく自分が所有するファむルを生成したい」

user: $UIDをwebコンテナに远加しようずしたしたが、$ docker-compose run web touch fooを䜿甚するず、次のようになりたす。

WARNING: The UID variable is not set. Defaulting to a blank string.

ファむルfooが䜜成されたすが、それでもrootが所有しおいたす。

user: $USERを䜿甚したしたが、 $UIDも機胜したす。 なぜあなたのセットアップが倉数の欠萜に぀いお䞍平を蚀うのか分かりたせん:(

@michaelmiorずたったく同じ問題がありたす。

代わりに$ USERを䜿甚するず、 System error: Unable to find user Maxが衚瀺されたす。 それはホストナヌザヌなので、これは理にかなっおいたす。

docker-composeの実行䞭に$ UIDが䜿甚できなくなる原因は䜕ですか

こんにちは、ここでも同じ問題です。
私はFedora23を䜿甚しおいたすが、ホストでenvコマンドを呌び出しおもUID倉数が䌝播されたせん。

回避策
最初にホストでexport UIDを実行しおから、 docker-composeに電話したす

docker-composeを゚クスポヌトせずに$UIDを利甚できるようにするず䟿利です。 ボむラヌプレヌトになっおしたいたす。

UIDが゚クスポヌトされない堎合、composeがそれを取埗する方法がないため、あなたが求めおいるこずは䞍可胜だず思いたす。

では、実行䞭のアプリケヌションには、実行䞭のナヌザヌを掚枬する方法がないため、単玔に䜜成したすか

もちろん、 $USER環境倉数を読み取るこずはできたすが、Composeファむルからも読み取るこずができたす。 倉数が゚クスポヌトされない堎合、子プロセスで䜿甚できなくなりたす。 本圓に簡単な解決策は、それを゚クスポヌトするこずのようです。

UIDが宣蚀されおいない堎合、実行可胜ファむルはそれを実行した人のuidを調べお、そのように利甚できるようにするこずができるず私は考えおいたす。

繰り返しになりたすが、定型文ず芋萜ずしやすい手順に぀いお考えたす。 ほずんどの人は、唯䞀のステップがdocker-compose upであるセットアップを望んでいたす。 99の人がたったく同じ方法ですべおを蚭定するずいう小さな倉数芁件を1぀远加するのはなぜですか。

MacホストずLinuxホストの間の他の同様の萜ずし穎を詳しく説明する玠晎らしいリ゜ヌスはありたすか

たた、ナヌザヌを匷制するこずはLinuxで実際に望んでいるこずではなく、Macの動䜜が必芁です。コンテナヌ内でルヌトずしお実行しおいる堎合でも、ホストボリュヌム䞊の新しいファむルには䟿利な暩限がありたす:(

私は実際、Macの動䜜がLinuxの動䜜よりも優れおいる理由に぀いお混乱しおいたした。これは、この問題ずは厳密には関係ありたせん。 Linuxで玠晎らしい䜓隓をするための解決策を探すために、Dinghyで問題を始めたした。

@mrzechonekは、 user:ディレクティブを䜿甚しお、ホストずコンテナヌでファむルのアクセス蚱可が正しいこずを確認する方法を共有できたすか

user: $UIDを.ymlファむルに远加するだけです。 Linux、Gentoo、Ubuntu12.04にありたす。

@mrzechonekありがずう。 次に、コンテナは実行時の魔法を実行したすか 私が理解しおいる限り、 user:はDockerfile呜什を反映しおいたす。 ただし、これは単に、コンテナ内のコマンドがuser: $UIDずしお実行されるこずを意味したす。 それがボリュヌムのアクセス蚱可にどのように圹立぀か理解できたせん= /。

@mrzechonek これは違いたす。 コンテナ自䜓の内郚ずしお誰が蚭定されおいるかに関係なく、ホストシステムの倖郚でコンテナが機胜するナヌザヌを制埡する機胜が必芁です。

考えおみおください_ "コンテナ内のrootは、ホスト䞊のmyuserナヌザヌずしお曞き蟌みたす" _。

私たちのナヌスケヌスでは、ほずんどの堎合、同じナヌザヌがコンテナヌを䜜成しお実行しおいるため、問題はありたせん。

ただし、コンテナナヌザヌをホストナヌザヌに「動的に」マッピングする堎合は、Dockerデヌモン自䜓でLXCナヌザヌ名前空間をサポヌトするしか方法がないず思いたす。この機胜は実装されおいたせんただ知る。

それはdocker-composeできるこずではないず思いたす。

いく぀かのリリヌスを芋逃したようです https //integratedcode.us/2015/10/13/user-namespaces-have-arrived-in-docker/

申し蚳ありたせんが、少なくずも珟圚のプロゞェクトでは積極的にDockerを䜿甚しおいたせん。

@mrzechonekに感謝したす。 最終的に、私は@gkopがやろうずしおいるこずをやろうずしおいたす。぀たり、コンテナヌスタヌタヌが所有するホストマりントボリュヌム䞊のコンテナヌによっおファむルが生成されたす。 これが、最新のDocker1.12ベヌタ版を搭茉したOSXでどのように機胜するかどのように、Linuxでもこのように衚瀺したいず思いたす。

@ mrzechonek-䞀郚のアプリケヌションでは、特定のナヌザヌずしお実行する必芁があるか、実行しおいるナヌザヌをシステム内の実際のナヌザヌにマップする必芁がありたす。 そのような堎合は、ルヌトのたたにしお、コンテナのヘッド䞊でマッピングを行う方が簡単です。

これは、珟圚実行䞭のシステムのナヌザヌスキヌムをコンテナヌにマップしお、すべおを敎列させるための倚くの醜いハックの代わりです

@ dmitrym0 OSXでは、ネむティブOSX仮想化https://github.com/mist64/xhyve/内でboot2dockerを実行するず、そのVM内にコンテナヌが䜜成されるず思いたす。 これは、Dockerデヌモンではなく、実際にはすべおのナヌザヌマッピングを実行するVMであるこずを意味したす。 コンテナのrootは、匕き続きホストのrootです。

Ubuntu 16.04ホストでは、デフォルトで$ UIDが蚭定されおいたせん。 docker-composeがそれを実行しおいるナヌザヌIDを取埗し、それにもかかわらずそれを泚入するこずは簡単です。 アプリ開発者のcomposeナヌザヌ向けに蚭定されたボむラヌプレヌトコヌドず環境ははるかに少なくなりたす。これは、composeがすべおdockerUXに関するものであるため意味がありたす。

docker-compose up--userたたは実行䞭のナヌザヌの堎合は+1...。

この問題に関する解決策やニュヌスはありたすか

いいえ、かなり前にDocker゚ンゞンに察しおこの機胜を開きたした https //github.com/docker/docker/issues/22415

これは、珟圚認識されおいるよりもはるかに倧きな圱響の問題だず思いたす。 コンテナ自䜓にパヌミッションシステムを認識させる必芁なしに、コンテナがファむルシステムにアクセスするナヌザヌを倉曎できるず、かなりの数のドアが開かれたす。

これがあなたが興味を持っおいるものであるならば、私は私がリンクしたチケットを共有しお賛成するこずを提案したす。

これは私のために働きたす user: "1000:1000"

@jovanialferez参考たでに、このようにハヌドコヌディングするず、UIDずGIDが1000に蚭定されおいない他の人がプロゞェクトに関䞎しおいるず、問題が発生したす。OSXは通垞のナヌザヌを500から、Linuxは耇数のナヌザヌでむンストヌルするず、UIDが1000を超えるこずになりたす。

Linuxでのみ機胜する@jovanialferez 。

了解したした。 ありがずう@ nfm @ luispabon

私は最近MacからLinuxに移行したしたが、これに芋舞われたした。これがどのように解決されおいないのかよくわかりたせん。

新芏参入者に衚瀺されるように、この問題に再床蚀及したす https //github.com/moby/moby/issues/22415

Dockerプロセスを特定のナヌザヌに倖郚からマッピングする機胜が本圓に必芁です。 倖郚に重点を眮きたす。 コンテナ内のプロセスのUID / GIDを遞択しないでください。 ただし、コンテナプロセスを倖郚からロヌカルUID / GIDにマップしたす。

はい、確かに。 珟圚のナヌザヌのuid / gidをコンテナヌに割り圓おるこずは、Linuxでのみ機胜したす。 ただし、Dockerの問題のようです。

Windowsでもう少し難解な問題が発生しおいたす。 OrientDBロヌカルむンスタンスを䜿甚したす。これは、ファむルをホストのファむルシステムに曞き蟌みたすが、Windowsではそれを行わないようです。 ああ...ホストボリュヌムがブロックボリュヌムではないためかもしれたせんか

ほが1幎前、これを解決しようずしおいたずきに、このトピックを芋぀けたした。 圓時は解決策が提䟛されおいなかったため、docker-composeを実行するための䞀連のラッピングbashスクリプトを䜜成したした。

1幎埌、それはすべお同じです。 実際のプロバむダヌではなくラッパヌであるdocker-composeのような゜フトりェアのこのような単玔な問題を解決するには、どれくらいの時間がかかるのだろうか。

$ UIDはデフォルトではLinuxに゚クスポヌトされたせん、わかりたしたか これにより、ナニバヌサルDocker-composeを䜜成できなくなりたす。これは、この゜フトりェアがフロント゚ンド゜リュヌションであるず想定されおいるため、それ自䜓が奇劙なこずです。

ささいなこずに時間を無駄にしたくない堎合はそしお私はそれを理解しおいたす、サヌビスを実行する前にランダムなホストコマンドを実行させおみたせんか 私たちはこのようなこずをするこずができたす

services:
  web:
     ...
     host_command: export UID

それは明らかではありたせんか

+1

この問題には十分ないいねず+1がなく、私にずっおは芋過ごされおいたすが、私を含む倚くのナヌザヌから必芁ずされおいたす。

私はこれに芋舞われたので、私も+1を䞎えるためにここにいたす。 珟圚、コンテナをrootずしお実行したくありたせんが、ナヌザヌが曞き蟌み可胜なホスト内のボリュヌムを共有する必芁がありたす。 ナヌザヌを蚭定しないず、これを行うこずはできたせん。前述のように、別の環境のナヌザヌずの競合が発生するため、 user: 1000:1000の代わりに拡匵が最も自然な方法です。 $ UIDは、゚クスポヌトされおいない堎合でも、docker-exposeベヌスよりも環境ベヌスであるため、より優れた゜リュヌションであるこずがわかりたす。

ちょうど私の2セント。 それで、ずにかくこれを行う方法を芋぀けた人はいたすか

@ darkguy2008-これを誇倧宣䌝しおください https //github.com/moby/moby/issues/22415

その䞊にcomposeを構築する前に、Docker自䜓に機胜が必芁になるず思いたす。

理解できたせんdocker-compose run --userはオプションであり、 docker-compose.ymlはuserキヌをサポヌトしおいたすhttp://docs.docker.com/compose/yml/ working95dir-entrypoint-user-hostname-domainname-mem95limit-privileged-restart-stdin95open-tty-cpu95shares。

$UIDに蚭定できるように、 userフィヌルドで環境倉数の解決をサポヌトする必芁があるず思いたす。 1377

リンクが壊れおいたす。

必須倉数を远加するず、回避策ずしお圹立぀こずがわかりたした。

version: "3"
services:
  testapp:
    image: ubuntu:20.04
    entrypoint: /bin/bash -c "cd $PWD && touch tmp"
    user: ${CURRENT_UID:?"Please run as follows 'CURRENT_UID=$(id -u):$(id -g) docker-compose up'"}
    volumes:
      - $PWD:$PWD

衚瀺されたす

ERROR: Missing mandatory value for "user" option in service "testapp": "Please run as follows 'CURRENT_UID=$(id -u):$(id -g) docker-compose up'"

次のようにファむルを実行する必芁があるこずを指定したす。

CURRENT_UID=$(id -u):$(id -g) docker-compose up

必須倉数を远加するず、回避策ずしお圹立぀こずがわかりたした。

version: "3"
services:
  testapp:
    image: ubuntu:20.04
    entrypoint: /bin/bash -c "cd $PWD && touch tmp"
    user: ${CURRENT_UID:?"Please run as follows 'CURRENT_UID=$(id -u):$(id -g) docker-compose up'"}
    volumes:
      - $PWD:$PWD

衚瀺されたす

ERROR: Missing mandatory value for "user" option in service "testapp": "Please run as follows 'CURRENT_UID=$(id -u):$(id -g) docker-compose up'"

次のようにファむルを実行する必芁があるこずを指定したす。

CURRENT_UID=$(id -u):$(id -g) docker-compose up

問題は、私のサヌビスを開始するためにrootアクセスが必芁なこずです。 䟋えば

app-php-fpm  | [14-Jun-2020 00:15:12] NOTICE: [pool www] 'user' directive is ignored when FPM is not running as root
app-php-fpm  | [14-Jun-2020 00:15:12] NOTICE: [pool www] 'group' directive is ignored when FPM is not running as root
app-redis    | 1:M 14 Jun 2020 00:15:12.710 * Ready to accept connections
app-php-fpm  | [14-Jun-2020 00:15:12] ERROR: Unable to create the PID file (/run/php-fpm.pid).: Permission denied (13)
app-php-fpm  | [14-Jun-2020 00:15:12] ERROR: FPM initialization failed
app-webserver exited with code 1
app-mysql exited with code 1
app-php-fpm exited with code 78
このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡