起動時にdocker-composeを実行する方法は?


20

これはDockerを実行しているUbuntu 14.04 LTS VM上にrespawnあり、問題の原因ではないかと考えていますが、理想的な解決策は定かではありません。

現在のスタートアップスクリプト(cat /etc/init/dockersuitecrm.conf

description "Start docker containers"
author "Batman"
start on filesystem and started docker
stop on runlevel [!2345]
respawn
script
    docker-compose -f /usr/bin/myapp/docker-compose.yml -p myapp start
end script

この「動作」myappは生き生きとしており、応答/sbin/initしますが、で監視するとすべてのCPUを占有しhtopます。upstart(sudo rm /etc/init/dockersuitecrm.conf)からエントリを削除し、手動でSSHを実行して実行するdocker-compose -f /usr/bin/myapp/docker-compose.yml -p myapp startと、CPUが100%の問題で表示されず、以前のようにmyapp再び機能し、応答します。

したがって、上記のdocker-composeの開始方法が間違っていると思われます。docker-compose手動の介入なしで常に実行している正しい開始方法は何ですか?

編集:/usr/bin/myapp -> /home/batman/dockerapps/myappシンボリックリンクとしてではなく重要です。


解決策ではありませんが、回避策としてrespawn、スクリプト内のコマンドなしでこれを実行できます。
DeepSpace101

同じ質問ですが、私はこれを見ました:serverfault.com/questions/615820/…。魔法はを使用することdocker-compose startです。
マークロペス

私は同様の構成を持っていますが、scriptブロックを使用しません。たぶんそれが問題の一部でしょうか?私が持っているchdir /usr/bin/myapp/と次の行のexec docker-compose up代わりに。
jmreicha

バックグラウンドでdocker-composeを実行したいだけではありませんか?すなわちdocker-compose up -d
KCD

再起動を入れてください:常にコンテナの仕様
Lu32

回答:


9

時間間隔を使用する代わりに、単にcrontabを使用します@rebootと言うだけです

そのため、このスクリプトを開始するユーザーとしてログインし、コマンドを入力します

crontab -e

そして、入力します

@reboot /better/enter/fullpath/here/docker-compose -f /usr/bin/myapp/docker-compose.yml -p myapp start

システムを再起動し、機能するかどうかを確認します。upstartに比べて利点が1つあります。たとえそれが少し遅れて開始されたとしても、ネットワーキングなどの依存関係について既に心配する必要はありません。


このように再起動を実行すると、どのようにきれいになりますか?
ジャスティンスミス

1
申し訳ありませんが、これはあまり良い答えではありません。時々動作するかもしれませんが、他のdocker要件の前にcronがロードされる可能性があるため、競合状態に陥ります。
オテウス

2

Docker Compose定義のバージョン2を使用していると仮定するとdocker-compose.yml、次のことができます。

restart: alwaysそのように定義する:

version: '2'
services:
  web:
    image: nginx
    restart: always

リファレンス: https : //docs.docker.com/compose/compose-file/compose-file-v2/


1
問題は、どのdockerのサイトが答えていないかということです。「docker-composeを開始する正しい方法は、手動での介入なしで常に実行されていますか?」です。
オテウス

0

Dockerはすぐには準備できません。スクリプトの実行が早すぎると、何も起こりません。Dockerは準備が整い次第docker psコマンドへの応答を開始するため、crontabでこのトリックを使用できます。

nano / etc / crontabs / root

@reboot / usr / bin / docker ps && / usr / bin / docker-compose -f /prod.yml start

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.