回答:
crontab
または廃止された/etc/rc.local
ファイルを使用する場合はsleep 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
Docker化されたプロジェクトパスでパラメーターを変更します。そして、サービスを自動的に開始できるようにします。
systemctl enable docker-compose-app
systemctl start docker-compose-app
とsystemctl status docker-compose-app
私は考えてあなたが探しているものです。
systemctl start docker-compose-app
がこれに遭遇したとき、私にとってはうまくいきませんでした:Job for docker-compose-app.service failed because the control process exited with error code. See "systemctl status docker-compose-app.service" and "journalctl -xe" for details
service docker-compose-app start
、ステータスはservice docker-compose-app status
、ストップ:service docker-compose-app stop
追加できるはずです:
restart: always
docker-compose.ymlファイルで再起動するすべてのサービスに
restart: always
いくつかの重大なバグがあることに注意してください。たとえば、ホストのマウントは再起動時にアタッチされません。私の意見では、既存のホイールが正方形の場合は、ホイールを再発明する方が良いです。
docker.service
システムの起動時に有効になっている場合
$ sudo systemctl enable docker
あなたのサービスdocker-compose.yml
は
restart: always
以下のコマンドを1回だけ実行すると、システムを再起動したときにすべてのサービスが実行されます
docker-compose up -d
私が試したところrestart: always
、それはいくつかのコンテナ(php-fpmなど)で動作しますが、一部のコンテナ(nginxなど)が再起動後にまだ再起動しないという問題に直面しました。
問題を解決しました。
crontab -e
@reboot (sleep 30s ; cd directory_has_dockercomposeyml ; /usr/local/bin/docker-compose up -d )&
常に docker composeファイルでrestart:を使用します。
Docker-compose up -d
画像からコンテナを再度起動します。docker-compose start
停止したコンテナーを開始するために使用します。イメージから新しいコンテナーを起動することはありません。
nginx:
restart: always
image: nginx
ports:
- "80:80"
- "443:443" links:
- other_container:other_container
また、他のコンテナの依存関係がある場合は、最初に作成されるようにdockerファイルにコードを書き込むことができます。
user39544
の回答への追加として、もう1つのタイプの構文crontab -e
:
@reboot sleep 60 && /usr/local/bin/docker-compose -f /path_to_your_project/docker-compose.yml up -d
crontab -e
ユーザーpiとして実行し、piはグループ
--restart always
または--restart unless-stopped
またはドッキングウィンドウ-compose.yml使用中のrestart: always
- > のRef。ただし、一部のコンテナでは機能しない可能性があります。