web-dev-qa-db-ja.com

どのようにしてDocker-ubuntuコンテナーをbashに起動しますか?

この質問 からの回答は機能しません。

Dockerコンテナは、attachができる前に常に終了するか、_-t_フラグを受け入れません。試したすべてのコマンドをリストできましたが、それはstartexecattachとさまざまな_-it_フラグと_/bin/bash_の組み合わせです。

既存のコンテナをbashで起動するにはどうすればよいですか?なぜこんなに難しいのですか?これはDockerの「不適切な」使用ですか?

編集:_docker run ubuntu_でコンテナーを作成しました。コンテナに関する情報:60b93bda690f ubuntu "/bin/bash" About an hour ago Exited (0) 50 minutes ago ecstatic_euclid

14
Andrew

まず第一に、コンテナは仮想マシンではありません。コンテナはプロセスを実行するための隔離環境です。コンテナのライフサークルは内部で実行中のプロセスにバインドされます。プロセスが終了すると、コンテナも終了し、隔離環境なくなっている。 「コンテナにアタッチする」または「コンテナに入る」という意味は、実際には、実行中のプロセスの隔離環境に入ることを意味します。終了した場合、コンテナも終了しているため、attachまたはenterを格納するコンテナはありません。したがって、docker attachdocker execのコマンドは、runningコンテナーを対象としています。

docker runDockerfileで構成され、Dockerイメージに組み込まれると、どのプロセスが開始されます。イメージとしてubuntuを例に取ります。docker inspect ubuntuを実行すると、出力に次の構成が見つかります。

"Cmd": ["/bin/bash"]

つまり、docker run ubuntuを実行するとプロセスが開始されますが、/bin/bashですが、インタラクティブモードではなく、ttyを割り当てないため、プロセスはすぐに終了し、コンテナーは終了します。そのため、再びコンテナに入る方法はありません。

コンテナを起動してbashと入力するには、次を試してください:

docker run -it ubuntu

その後、コンテナシェルに移動します。別のターミナルを開いてdocker psを実行すると、コンテナが実行中であることがわかり、docker attachを実行するか、docker exec -it <container_id> bashを入力して再入力できます。

詳細については このリンク を参照することもできます。

22
shizhz

ここに、コメントとしての指示を含む非常に単純なDockerfileがあります。

FROM ubuntu:19.04

ENV TERM linux
ENV DEBIAN_FRONTEND noninteractive

RUN apt-get update
RUN apt-get install -y  

CMD ["/bin/bash"]


# ... save this file as Dockerfile then in same dir issue following
#
# docker build --tag stens_ubuntu .   # creates image stens_ubuntu
#
# docker run -d  stens_ubuntu  sleep infinity # launches container 
#
# docker ps     #   show running containers
#
# 
# ... find CONTAINER ID from above and put into something like this
#
# docker exec -ti $( docker ps | grep stens_ubuntu | cut -d' ' -f1 ) bash   #  login to running container
# docker exec -ti 3cea1993ed28 bash   #  login to running container using sample containerId  
#

実行する作業がない場合、コンテナは正常に終了します...作業を行わない場合、この理由で起動するとすぐに終了します...通常、Dockerfileの最後のコマンドは、サーバーのフレーバーの実行です内部イベントループのために生き続け、そうすることで、その囲んでいるコンテナを生き続けます...それのあなたの呼び出しの最後のパラメータとしてサーバー実行可能ファイルに言及することができます

docker run -d  my-image-name  my-server-executable
3
Scott Stensland