この質問 からの回答は機能しません。
Dockerコンテナは、attach
ができる前に常に終了するか、_-t
_フラグを受け入れません。試したすべてのコマンドをリストできましたが、それはstart
exec
attach
とさまざまな_-it
_フラグと_/bin/bash
_の組み合わせです。
既存のコンテナをbashで起動するにはどうすればよいですか?なぜこんなに難しいのですか?これはDockerの「不適切な」使用ですか?
編集:_docker run ubuntu
_でコンテナーを作成しました。コンテナに関する情報:60b93bda690f ubuntu "/bin/bash" About an hour ago Exited (0) 50 minutes ago ecstatic_euclid
まず第一に、コンテナは仮想マシンではありません。コンテナはプロセスを実行するための隔離環境です。コンテナのライフサークルは内部で実行中のプロセスにバインドされます。プロセスが終了すると、コンテナも終了し、隔離環境なくなっている。 「コンテナにアタッチする」または「コンテナに入る」という意味は、実際には、実行中のプロセスの隔離環境に入ることを意味します。終了した場合、コンテナも終了しているため、attach
またはenter
を格納するコンテナはありません。したがって、docker attach
、docker exec
のコマンドは、runningコンテナーを対象としています。
docker run
がDockerfile
で構成され、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
を入力して再入力できます。
詳細については このリンク を参照することもできます。
ここに、コメントとしての指示を含む非常に単純な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