エントリーポイントとcmdの両方を指定して、他の誰かが作成したDockerイメージを検査したいと思います。次に例を示します。
ENTRYPOINT ["/usr/sbin/Apache2ctl"]
CMD ["-D", "FOREGROUND"]
私は現在します:
docker run --interactive --tty --entrypoint=/bin/bash $IMAGE --login
CMDを空に上書きする方法はありますか( "--login"を使用する必要がないため)?
単にdocker run -it --entrypoint=/bin/bash $IMAGE -i
を介して入力し(イメージから新しいコンテナーを起動し、インタラクティブモードでbashシェルを取得します)、そのコンテナーでentrypointコマンドを実行します。
次に、実行しているはずの状態で実行中のコンテナーを検査できます。
編集:Docker 1.3以降では、exec
を使用して、実行中のコンテナーでプロセスを実行できます。通常どおりコンテナーを起動し、次のコマンドを入力してコンテナーを入力します。
docker exec -it $CONTAINER_ID /bin/bash
Bashがインストールされていると仮定すると、実行中のコンテナーへのシェルアクセスが与えられます。
参照: https://docs.docker.com/engine/reference/run/#overriding-dockerfile-image-defaults
関連部分:
CMD(デフォルトのコマンドまたはオプション)Dockerコマンドラインでオプションのコマンドを呼び出します。
$ docker run [OPTIONS] IMAGE[:TAG] [COMMAND] [ARG...]
IMAGEを作成したユーザーが、Dockerfile CMDを使用してデフォルトのコマンドをすでに提供している場合があるため、このコマンドはオプションです。オペレーター(イメージからコンテナーを実行する人)は、新しいコマンドを指定するだけでそのCMDをオーバーライドできます。
画像がENTRYPOINTも指定している場合、CMDまたはCOMMANDが引数としてENTRYPOINTに追加されます。
したがって、必要なことを行うにはonlyコマンドを指定し、/bin/bash
を使用してオーバーライドします。まったく「空」ではありませんが、仕事が99%完了します。
ここに来て、エントリポイントANDコマンドをオーバーライドして他のコマンドを渡すために、たとえばエントリポイントスクリプトの代わりにbashを実行してから、パラメーターを指定して他のコマンドを実行します(他の回答からはわかりません)。
docker run [other options] --entrypoint '/bin/sh' $IMAGE -c 'npm link gulp gulp-sass gulp-sourcemaps'
-c 'npm link ...'
は/bin/sh
のパラメーターなので、ここで、コンテナーで実行するコマンドを渡すことができます。 /bin/sh
はアルパイン画像用、/bin/bash
は他の画像用と考えられます。