Docker Alpineコンテナーでのシェルの開始


165

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

アルパインのベースコンテナーでインタラクティブシェルを起動するコマンドは何ですか?

回答:


282
ole@T:~$ docker run -it --rm alpine /bin/ash
(inside container) / # 

上記で使用したオプション:

  • /bin/ashBusyBoxが提供するAsh(Almquist Shell)です
  • --rm終了時にコンテナを自動的に削除します(docker run --help
  • -i 対話モード(接続されていない場合でもSTDINを開いたままにする)
  • -t 疑似TTYを割り当てる

1
確かに-良い考えです-ashはシェルであり、-rmは実行の完了後にコンテナーを削除します。したがって、実行後もコンテナーを使用できるようにするには、-rmの使用をスキップします。私はATMを実験しているだけなので、それを使用しています。
Ole

次に、ubuntuのようなdetachプロパティを使用してそれを実行する方法は?
Benyamin Limanto

私はどちらの場合も信じています... UbuntuまたはAlpine ...あなたはそれに-dオプションを与えるだけです。
Ole

2
アルパインが持っていることashと持たないことを指摘するための+1は、アルパインbashにあまり詳しくないため、私が以前にコンテナにアクセスできなかった理由です。
code_dredd

RHELを使用していて、アクセス拒否のエラーが表示された場合は、再びSELinuxです... setenforce 0を一時的に実行する必要があります:P
Parth Patel

67

通常、アルパインのLinuxイメージが含まれていないbash代わりに使用することができ、/bin/ash/bin/shashまたはのみ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

この情報がお役に立てば幸いです。


1
違いは何である/bin/ashとはash/bin/shおよびと同様ですsh
Peter Mortensen、2018

1
こんにちは@ peter-mortensen。違いは ash、へのシンボリックリンクにすぎないこと /bin/ashです。一部のLinuxディストリビューションにはシンボリックリンクがありません。
jansanchez

28

現在、Alpineイメージは/bin/shデフォルトで直接起動するため、実行するシェルを指定する必要はありません。

$ sudo docker run -it --rm alpine  
/ # echo $0  
/bin/sh  

これは、alpineイメージのDockerfilesにCMDコマンドが含まれているためです。このコマンドは、コンテナの起動時に実行するシェルを指定します CMD ["/bin/sh"]

古いアルパインイメージバージョン(2017より前)では、DockerがCMDの追加レイヤーを作成するために使用されていたため、イメージサイズが増加するため、CMDコマンドは使用されませんでした。これは、アルパインのイメージ開発者が避けたかったことです。最近のDockerバージョン(1.10以降)では、CMDはレイヤーを占有しなくなったため、alpine画像に追加されました。したがって、CMDが上書きされない限り、最近のAlpineイメージが起動し/bin/shます。

参考として、Glider Labsによる公式のAlpine Dockerfilesへの次のコミットを参照して
ください。


4

コンテナがすでに実行されている場合:

docker exec -it container_id_or_name ash
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.