【Dockerコンテナ】再自動起動の強制停止方法

Dockerを起動したときに、前回動いていたコンテナなどが勝手に自動起動してしまうのを防ぐ方法の紹介です。
毎回Dockerを起動した時に、全く使ってないコンテナが自動起動するせいで、わざわざ停止して別のコンテナ起動するという非常に煩わしいことをしていたので、それを解消すべく方法をまとめました。
Dockerコンテナが自動起動する原因
まず原因ですが、docker-composeファイルでrestart: alwaysやunless-stoppedが設定されているコンテナが自動起動の対象になっていて、これのせいでDockerを立ち上げるたびに自動で起動してしまいます。
restart: noにすることで自動起動を回避することができます。
restart: no
(複数プロジェクトを扱う人にとっては、restart: noをデフォルトにしたいのですが、そう思うのは僕だけなのでしょうか)
restart: noが効かなかった
自分の環境の場合、単にrestart: noするだけでは自動起動されたままで謎の現象になっていました。
コンテナのrestart policyを変更が確実
コンテナのrestart policyを変更することでそれ以降Dockerを起動するたびに自動起動されることが確実になくなります。
コンテナの確認
まずは起動されているコンテナを確認します。
% docker ps -a
restart policyを確認して原因の特定
以下コマンドでrestart policyを確認すると、以下のように設定の一覧が出力されます。
ここでalwaysになっているものが今回の問題点です。
% docker inspect --format '{{.Name}} - {{.HostConfig.RestartPolicy.Name}}' $(docker ps -aq)
/sample-webapp-1 - no
/sample-redis-1 - no
/sample-db - always
/sample-db-1 - no
/sample-db-1 - no
restartを停止する
以下コマンドでrestart が always や unless-stopped になっているものを no に変更します。
% docker update --restart=no sample-db
再度、restart policyを確認してnoになっているか確認してください。
% docker inspect --format '{{.Name}} - {{.HostConfig.RestartPolicy.Name}}' $(docker ps -aq)
/sample-webapp-1 - no
/sample-redis-1 - no
/sample-db - no
/sample-db-1 - no
/sample-db-1 - no
【備考】restart policyをまとめてnoにするコマンド
以下コマンドで一気に設定をnoにできます。
% docker update --restart=no $(docker ps -aq)
Dockerアプリを落として再起動してみる
Dockerアプリをキルして再起動してみると、、、
いつも自動起動されていたコンテナが起動しなくなりました。
まとめ
Dockerコンテナの自動起動を停止する方法として、restart policyを変更する手順を紹介しました。
docker-composeファイルでrestart: noを設定するだけでなく、既存のコンテナに対してもdocker update --restart=noコマンドでrestart policyを変更することで、確実に自動起動を防ぐことができます。
これで、Dockerを起動するたびに不要なコンテナが立ち上がる煩わしさから解放されました。
Anycloudでは一緒に働くメンバーを募集しています!
Anycloudは、ユーザーの心を動かす体験を届けることを大切にしています。フルリモート・フルフレックスの環境のもと、ライフスタイルに合わせた働き方を実現しながら挑戦したい方を歓迎します。詳細はこちらをご覧ください。


