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 Composeで`restart: always`になっているコンテナを、override.yamlで自動起動しないようにする

Posted at

Docker Composeでrestart: alwaysになっているコンテナを、ローカル開発環境だけ自動起動しないようにします。

環境

$ docker --version
Docker version 27.3.1, build ce12230
$ docker compose version
Docker Compose version v2.29.7

結論

こんな感じで、compose.yamlと同じプロジェクトルートにcompose.override.yamlを配置しておけばOK

$ docker run --rm --volume $(pwd):/app --workdir /app ruby:slim ruby -e "require 'yaml';puts YAML.dump(Hash[{ 'services' => Psych.load_file('compose.yaml', aliases: true)['services'].keys.map{|k| [k, {'restart'=> 'no'}]}.to_h }])" > compose.override.yaml

読み込むファイル名compose.yamlと出力先compose.override.yamlの部分は適当に修正してください。

必要に応じて、compose.override.yaml.gitignoreに含めておくのが良いと思います。

説明

Docker Composeの機能としてcompose.override.yamlという名前のファイルを作成しておくと、このファイルで設定を上書きするというものがあります。
参考: Merge | Docker Docs

compose.override.yaml(例)
services:
  web:
    restart: 'no'
  app:
    restart: 'no'
  db:
    restart: 'no'

このようなyamlファイルを作成すればOKなわけです。

以下のようなRubyプログラムで、サービス一覧を出してrestart: noを付与するyamlを出力しています。
Rubyを選択したのは標準ライブラリでYAMLをパースできるからです。

require 'yaml'

puts YAML.dump(
  Hash[{ 'services' =>
    Psych.load_file('compose.yaml', aliases: true)['services'].keys.map{|k|
      [k, {'restart'=> 'no'}]
    }.to_h }
  ]
)

これをワンライナーにして、docker runで実行できるようにしたのが冒頭のコマンドです。

danny-avila/LibreChatlanggenius/difyのような、本番環境でもDocker Composeを使って起動することが想定されているソフトウェアをローカル環境で動かしたい時に、このような設定ファイルを置いておくと自動起動せずに済みます。

参考

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?