起動時にコンテナを自動起動させるために、コマンドを追加してみた:
etc/rc.local に cd directory_has_docker-compose.yml && docker-compose up -d
というコマンドを追加してみた。
しかし、マシンを再起動すると、コンテナは動作しない。
システム起動時にどのように docker-compose up -d
を実行するのでしょうか?
crontab
または廃止された /etc/rc.local
ファイルを使用する場合、遅延が必要です(例:. 「マシンに応じて10インチスリープ」)、システムサービスが利用可能であることを確認します。 通常、「systemd」(または「upstart」)は、システムが起動したときに開始するサービスを管理するために使用されます。 これについても同様の構成を使用してみてください。
<。!-言語:bash-->。
# /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」フラグなしで実行したい場合:
<。!-言語:bash-->。
# /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`パラメータをドッカライズされたプロジェクトパスで変更します。 そして、サービスが自動的に開始されるようにします。
<。!-言語:bash-->。
systemctl enable docker-compose-app
システムの起動時に「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 )&
restart:常にを使用して、ドッカーでファイルを作成します。
Docker-compose up -d
は、画像からコンテナを再起動します。 停止したコンテナを起動するには、「ドッカー構成スタート」を使用します。画像から新しいコンテナを起動することはありません。
nginx:
restart: always
image: nginx
ports:
- "80:80"
- "443:443" links:
- other_container:other_container
また、他のコンテナに依存している場合は、最初に作成されるように、ドッカーファイルにコードを書き込むことができます。