実行したいDockerコンテナーがあるとします。次に呼び出すことができます
$ docker run ...
そしてすべてが大丈夫です。システムがクラッシュして再起動した場合に自動的に再起動されるようにコンテナを実行する組み込みの方法はありますか?
その場合、これはDocker Composeでも使用できますか?
はい、dockerには、これを処理するdocker run --restart=always
などの ポリシーの再起動 があります。これは compose.yml configファイル as restart: always
でも利用可能です。
ユーザーがログインを実行していなくてもコンテナを起動する場合(VirtualBox VMなど、起動するだけで毎回ログインしたくない)。 Ubuntu 16.04 LTSで実行した手順は次のとおりです。例として、Oracle dbコンテナーをインストールしました。
$ docker pull alexeiled/docker-Oracle-xe-11g
$ docker run -d --name=MYPROJECT_Oracle_db --shm-size=2g -p 1521:1521 -p 8080:8080 alexeiled/docker-Oracle-xe-11g
$ vim /etc/systemd/system/docker-MYPROJECT-Oracle_db.service
次のコンテンツを追加します。
[Unit]
Description=Redis container
Requires=docker.service
After=docker.service
[Service]
Restart=always
ExecStart=/usr/bin/docker start -a MYPROJECT_Oracle_db
ExecStop=/usr/bin/docker stop -t 2 MYPROJECT_Oracle_db
[Install]
WantedBy=default.target
起動時にサービスを有効にします
Sudo systemctl enable docker-MYPROJECT-Oracle_db.service
デフォルトの再起動ポリシー はno
です。
作成されたコンテナの場合、docker update
を使用して再起動ポリシーを更新します。
docker update --restart=always 0576df221c0b
0576df221c0b
はコンテナIDです。
ドキュメントからのより「穏やかな」モード:
docker run -dit --restart unless-stopped <image_name>
Windowsでコンテナーの起動時に起動を実現したかった。
そのため、システムブート時に起動するスケジュールタスクを作成しました。このタスクは、単に「Docker for Windows.exe」(またはdocker実行可能ファイルの名前)を開始します。
その後、再起動ポリシーが「常に」のすべてのコンテナが起動します。
これがcrontabの目的です。
@reboot sleep 10 && docker start <container name> 2>&1 | /usr/bin/logger -t 'docker start'
crontab -e
でユーザーcrontabにアクセスするか、crontab -l
で表示するか、/etc/crontab
でシステムcrontabを編集します