Ubuntuイメージ用の対話型シェルを起動するには、次のように実行します。
ole@T:~$ docker run -it --rm ubuntu
root@1a6721e1fb64:/# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
しかし、これを Alpine Dockerイメージ に対して実行すると、次のようになります。
ole@T:~$ docker run -it --rm Alpine
Error response from daemon: No command specified
Alpineベースコンテナでインタラクティブシェルを起動するためのコマンドは何ですか?
ole@T:~$ docker run -it --rm Alpine /bin/ash
(inside container) / #
上記で使用されたオプション:
/bin/ash
は、BusyBoxが提供するAsh( Almquist Shell )です。--rm
終了時にコンテナを自動的に削除します(docker run --help
)-i
対話モード(接続されていなくてもSTDINを開いたままにしておく)-t
擬似TTYを割り当てます通常、Alpine Linuxイメージにはbash
は含まれていませんが、代わりに/bin/ash
、/bin/sh
、ash
またはsh
のみを使用できます。
/ bin/ash
docker run -it --rm Alpine /bin/ash
/ bin/sh
docker run -it --rm Alpine /bin/sh
灰
docker run -it --rm Alpine ash
sh
docker run -it --rm Alpine sh
この情報がお役に立てば幸いです。
今日では、アルパインイメージはデフォルトで/bin/sh
から直接起動します。実行するシェルを指定する必要はありません。
$ Sudo docker run -it --rm Alpine
/ # echo $0
/bin/sh
これは、Alpine
image Dockerfilesに CMD
コマンドが含まれているためです。これは、コンテナの起動時に実行するシェルを指定します:CMD ["/bin/sh"]
。
DockerがCMD用の追加のレイヤーを作成するためにイメージサイズが大きくなるため、古いアルパインイメージバージョン(2017年以前)では、CMDコマンドは使用されていませんでした。これはアルパインの画像開発者が避けたかったことです。最近のDockerバージョン(1.10以降)では、CMDはレイヤーを占有しなくなったため、Alpine
イメージに追加されました。したがって、CMDが上書きされない限り、最近のアルパインイメージは/bin/sh
で起動します。
参考のために、Glider Labsによる公式Alpine Dockerfilesへの次のコミットを参照してください。
https://github.com/gliderlabs/docker-Alpine/commit/ddc19dd95ceb3584ced58be0b8d7e9169d04c7a3#diff-db3dfdee92c17cf53a96578d4900cb5b