0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

dockerを使って開発環境を構築しようとしていた時に、
dockerのコンテナ内に入ろうとしたところ、

image.png

なぜか入れない...

でもコンテナは正常に起動しているし、問題なさそうなのに、なぜ...?

この時、今までdockerでの開発環境構築時に、先輩から教わったコマンドを
なんとなーく入力して進めてしまっていたことに気がつきました。

というわけで、今回はdockerコンテナに入るコマンドで、
主要っぽい4つの方法を調べてまとめてみました。

1. docker exec

指定したコンテナ内で新しいシェルを開始するためのコマンド

✍️ 記述方法

docker exec -it <コンテナ名またはID> bash

💡 ポイント

  • 新しいシェルを開き、コンテナ内でコマンドを実行できる状態にしてくれる
  • 稼働中のコンテナに対してのみ実行できる
  • 複数回実行して、複数のシェルを開くことも可能

2. docker compose exec

docker-compose.yml ファイルで管理されるサービスに限定して使用されるコマンド
docker exec と同様に、新しいシェルを開始する

✍️ 記述方法

docker compose exec <サービス名> bash

💡 ポイント

  • docker-compose.ymlファイルに記載された、サービス名を指定して実行する
    (指定するのはコンテナ名でないことに注意!)
  • docker exec と同様、新しいシェルを開いてコマンドを
    実行可能な状態にしてくれる

3. docker attach

stdinなどコンテナの標準入出力に接続するためのコマンド

✍️ 記述方法

docker attach <コンテナ名>

💡 ポイント

  • 実行中のプロセスの標準入出力にアクセスするだけで、新しいシェルは開かない
  • プロセスが出力するログやエラーメッセージを確認できる
  • コンテナ内でのコマンド実行はできない
  • セッションの切断時には、Ctrl+Cだとコンテナ自体を停止させる可能性が
    あるため、Ctrl+P(一時的にコマンド入力モードにするショートカット)を
    実行後にCtrl+Q(ターミナルセッションを切断するショートカット)を
    実行した方が良い

4. docker start -ai

停止中のコンテナを起動し、そのコンテナの標準入出力に接続するコマンド

✍️ 記述方法

docker start -ai <コンテナ名>

💡 ポイント

  • 停止中のコンテナに対して実行して起動し、その起動時の標準入出力に接続する
  • docker attach同様、実行後に新しいシェルを開かない
  • 実行中のプロセスにアクセスするのではなく、
    コンテナの開始時から出力を確認できる

筆者がやらかしていた凡ミス

それで結局、筆者は何でdockerコンテナ内に入れなかったのか?というと、
私はdocker compose execでコンテナ内に入ろうとしていたのですが、
ここでdocker-compose.yml内に記載してある「サービス名」ではなく、
dockerの「コンテナ名」を指定していたんです。

docker-compose.yml内で定義されていない名前をサービス名として
指定していたんだから、service 〇〇 is not runningと言われるのも納得ですね。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?