短い答え1:あなたがいない場合は
:
docker --entrypoint "/bin/sh -c" -u root <image> cmd
短い答え2:
にDockerfileが、これをUSER
とSHELL
コマンドを使用しない場合Dockerは、ビルド後にイメージを圧縮または圧縮し、Dockerfileコマンドごとにイメージレイヤーを作成します。あなたは--->
と、各ステップの終わりにdocker build
の出力でそれらを見ることができます:
Step 2/8 : WORKDIR /usr/src/app
---> 5a5964bed25d # <== THIS IS IMAGE ID OF STEP 2
Removing intermediate container b2bc9558e499
Step 3/8 : RUN something
---> f6e90f0a06e2 # <== THIS IS IMAGE ID OF STEP 3
Removing intermediate container b2bc9558e499
画像IDを探しデバッグするRUNステップは(たとえば、あなたが上記にデバッグステップ3にしたい直前に、ステップ2の画像IDを取る)。それからちょうどそのイメージでコマンドを実行します。
docker run -it 5a5964bed25d cmd
長い答え1:
をあなたが実際にdocker run [image] cmd
ドッカーを実行すると、このようにcmd
を開始します。
- は、デフォルトエントリポイントを実行します
cmd
を引数として指定します。 Entrypointは、DockerfileのENTRYPOINT
コマンドによってビルドされたイメージに保存されます。つまり、cmd
がmy-app
であり、エントリポイントが/bin/sh -c
の場合、/bin/sh -c my-app
を実行します。
- は
- がcommulative画像のDockerfileからすべての
ENV
コマンドからの環境変数でそれを開始しDockerfileで最後USER
コマンドで定義された画像のデフォルトのユーザーIDとそれを開始し
docker build
が実行されますDockerfile RUN
は、Dockerfileのその時点(行)に存在していた値でのみ、全く同じです。
正確には、実行ラインの前にENVsとlast USERコマンドの値をとり、docker run
コマンドの値を使用する必要があります。
ほとんどの一般的な画像では、エントリポイントとして/bin/sh -c
または/bin/bash -c
があり、ほとんどの場合、rootユーザーで動作します。したがって、docker --entrypoint "/bin/bash -c" -u root <image> cmd
で十分でしょう。
です。これには一般的な回答はありません。質問している**具体的な**コマンドが必要です。他者に自分自身の違いを見せる方法を示す[mcve]も同様に役立ちます。 –
... 'COPY'のようなコマンドは、Dockerの内部で完全に実装されています。シェルにはまったく呼び出されません。 'RUN'とkinにはさまざまなモードがあります。文字型の引数リストを配列として渡すと、どこにもシェルがありません。 –