🥺
docker-composeで作成したコンテナから元のYAMLファイルを見つける方法
docker-composeで作成したコンテナから元のYAMLファイルを見つける方法
こんにちは!今回は、docker-composeで複数のコンテナを立ち上げた後、「どのYAMLファイルから作られたコンテナなのか分からなくなった...」という状況の対処法をご紹介します。
問題: コンテナ乱立でどのYAMLから作られたか分からない
複数のプロジェクトでdocker-compose
を使用していると、いつの間にかたくさんのコンテナが起動していて、「このコンテナはどのdocker-compose.yml
から作成されたんだっけ?」と悩むことはありませんか?
特に以下のような状況で混乱しがちです:
- 複数のプロジェクトを同時に開発している
- チームメンバーが作成したコンテナが残っている
- テスト環境と本番環境の設定を切り替えている
解決策: ラベル情報を活用する
実は、docker-compose
で作成されたコンテナには、元になった設定ファイルのパスがラベルとして記録されています!このラベル情報を活用すれば、どのYAMLファイルから作成されたのか簡単に特定できます。
コマンド一発で元のYAMLファイルを特定する
以下のコマンドを実行するだけで、各コンテナと対応するdocker-compose.yml
ファイルのパスが表示されます:
$ docker container ls --format "{{.Names}} {{.Labels}}" | sed -E 's/^([^ ]+) .*com.docker.compose.project.config_files=([^,]+).*/\1 \2/'
実行例
web-app-apache-1 /home/user/projects/webapp/docker-compose.yml
api-service /home/user/projects/webapp/docker-compose.yml
api-db /home/user/projects/webapp/docker-compose.yml
コマンドの解説
このコマンドは2つの部分から成り立っています:
-
docker container ls --format "{{.Names}} {{.Labels}}"
- コンテナ名とすべてのラベル情報を取得します
-
sed -E 's/^([^ ]+) .*com.docker.compose.project.config_files=([^,]+).*/\1 \2/'
- 正規表現を使って、コンテナ名と設定ファイルのパスだけを抽出します
-
com.docker.compose.project.config_files
というラベルに元のYAMLファイルパスが格納されています
応用: 特定のコンテナだけを絞り込む
特定のコンテナについてだけ知りたい場合は、grep
で絞り込むこともできます:
$ docker container ls --format "{{.Names}} {{.Labels}}" | sed -E 's/^([^ ]+) .*com.docker.compose.project.config_files=([^,]+).*/\1 \2/' | grep api
api-service /home/user/projects/webapp/docker-compose.yml
api-db /home/user/projects/webapp/docker-compose.yml
まとめ
- docker-composeで作成したコンテナは、元のYAMLファイルのパス情報をラベルとして保持しています
- 上記のコマンドを使えば、どのコンテナがどのYAMLファイルから作成されたかを簡単に特定できます
- これで「このコンテナ、どこから作ったっけ?」という悩みから解放されますね!
開発効率化のためのちょっとしたテクニックでしたが、お役に立てば幸いです。
Discussion
こういうtemplateを駆使する方法もあります
このほうが格好がいいですね。ありがとうございます!