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

【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 が alwaysunless-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を起動するたびに不要なコンテナが立ち上がる煩わしさから解放されました。

記事を書いた人

Matsuura

エンジニア

Matsuura

Anycloudでエンジニアしてます!主にFlutter・Typescript