LoginSignup
6
0

More than 1 year has passed since last update.

docker-composeのrunとexecの使い分け

Posted at

まだ完全には理解できていないけど、忘れないうちにメモ

docker-compose run --rm web bundle install

を実行してbundle installが成功したにも関わらず、なぜかrubocopを実行するとbundle installしろと怒られる・・・

$ docker-compose run --rm web bundle exec rubocop
Creating project_web_run ... done
Could not find regexp_parser-2.7.0 in any of the sources
Run `bundle install` to install missing gems.

ただしコンテナ内に侵入してbundle installしてからrubocopを実行したら問題なし
どこで何がどうなっているのかさっぱりわからないw

迷っていたらうちのマネージャーが教えてくれました!

まずはこの2種類があるんだよと

docker-compose run --rm web bundle install
docker-compose exec web bundle install

大雑把には

run --rm の方はコンテナを作って処理を流してから削除されるので、一時的な処理を流すのに適している
exec の方は今起動しているコンテナに処理を流している

なので、exec は起動していない時に実行したらエラーになる

$ docker-compose exec web bundle install
ERROR: No container found for web_1

コンテナの中で実行してうまくいったのはexecと同じ
なんとなくわかった!

ChatGPTさんで復習
復習するにもrun --rmexecという似て非なるものがあるということを知らなかったので、自分で調べてたらこの質問には辿り着けなかっただろうな

スクリーンショット 2023-04-04 16.33.17.png

Docker Compose において、run --rm と exec の主な違いは以下のとおりです。

    run --rm:新しいコンテナを実行し、そのコンテナが終了したら自動的に削除されます。
    exec:既存のコンテナ内で新しいプロセスを実行します。

具体的には、run --rmはコンテナを起動し、その中でコマンドを実行して終了するまで待ちます。そして、コマンドが完了したら、Docker はコンテナを削除します。この方法は、一時的にコンテナを実行する必要がある場合に便利です。

一方、execは既存のコンテナに接続し、その中で新しいコマンドを実行します。これは、既に実行中のコンテナ内で作業する必要がある場合に便利です。また、execは、実行中のコンテナに対して、追加のコマンドを実行することができます。これにより、コンテナ内で複数のコマンドを実行できるようになります。

簡単に言えば、run --rmは新しいコンテナを起動するためのものであり、execは既存のコンテナに接続して作業するためのものです。

ChatGPTもすげーし、うちのマネージャーもすげーw

6
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
6
0