システム起動時に docker-compose up -d を実行するには?

起動時にコンテナを自動起動させるために、コマンドを追加してみた:

etc/rc.local に cd directory_has_docker-compose.yml && docker-compose up -d というコマンドを追加してみた。

しかし、マシンを再起動すると、コンテナは動作しない。

システム起動時にどのように docker-compose up -d を実行するのでしょうか?

質問へのコメント (1)

crontabまたは廃止された /etc/rc.localファイルを使用する場合、遅延が必要です(例:. 「マシンに応じて10インチスリープ」)、システムサービスが利用可能であることを確認します。 通常、「systemd」(または「upstart」)は、システムが起動したときに開始するサービスを管理するために使用されます。 これについても同様の構成を使用してみてください。

# /etc/systemd/system/docker-compose-app.service

[Unit]
Description=Docker Compose Application Service
Requires=docker.service
After=docker.service

[Service]
Type=oneshot
RemainAfterExit=yes
WorkingDirectory=/srv/docker
ExecStart=/usr/local/bin/docker-compose up -d
ExecStop=/usr/local/bin/docker-compose down
TimeoutStartSec=0

[Install]
WantedBy=multi-user.target

または、「-d」フラグなしで実行したい場合:

# /etc/systemd/system/docker-compose-app.service

[Unit]
Description=Docker Compose Application Service
Requires=docker.service
After=docker.service

[Service]
WorkingDirectory=/srv/docker
ExecStart=/usr/local/bin/docker-compose up
ExecStop=/usr/local/bin/docker-compose down
TimeoutStartSec=0
Restart=on-failure
StartLimitIntervalSec=60
StartLimitBurst=3

[Install]
WantedBy=multi-user.target

'WorkingDirectory`パラメータをドッカライズされたプロジェクトパスで変更します。 そして、サービスが自動的に開始されるようにします。

systemctl enable docker-compose-app
解説 (12)

追加できるはずだ:

restart: always 

を追加してください。

解説 (6)

システムの起動時に「docker.service」が有効になっている場合。

$ sudo systemctl enable docker

docker-compose.ymlのサービスにはあります。

restart: always

コマンドを1回だけ実行すると、システムを再起動すると、すべてのサービスが実行されます。

docker-compose up -d
解説 (0)

restart:always`を試してみたところ、いくつかのコンテナ(php-fpmなど)ではうまくいったのですが、いくつかのコンテナ(nginxなど)では再起動しても再起動しないという問題に直面しました。

解決しました。

crontab -e

@reboot (sleep 30s ; cd directory_has_dockercomposeyml ; /usr/local/bin/docker-compose up -d )&
解説 (4)

restart:常にを使用して、ドッカーでファイルを作成します。

Docker-compose up -dは、画像からコンテナを再起動します。 停止したコンテナを起動するには、「ドッカー構成スタート」を使用します。画像から新しいコンテナを起動することはありません。

nginx:   
    restart: always   
    image: nginx   
    ports:
      - "80:80"
      - "443:443"   links:
      - other_container:other_container

また、他のコンテナに依存している場合は、最初に作成されるように、ドッカーファイルにコードを書き込むことができます。

解説 (1)

user39544'さんの回答に加えて、crontab -e`の構文をもう1つ:

@reboot sleep 60 && /usr/local/bin/docker-compose -f /path_to_your_project/docker-compose.yml up -d
解説 (1)