ホームページ >運用・保守 >Docker >docker がコンテナから出ない

docker がコンテナから出ない

王林
王林オリジナル
2023-05-16 20:35:362444ブラウズ

Docker コンテナを終了せずに実行し続けるには、さまざまな方法があります。この記事では、一般的に使用されるいくつかの方法とその長所と短所について説明します。

方法 1: --restart オプションを使用する

Docker には、コンテナが異常終了したときにコンテナを自動的に再起動できるオプション --restart が用意されています。オプションの値には noon-failurealways という 3 つの値があり、それぞれ再起動なし、異常終了時に再起動、常に再起動に対応します。具体例:

docker run --restart=always IMAGE_NAME

--restart オプションを使用する利点は、コマンド ラインにオプションを追加するだけで済むため、シンプルで使いやすいことです。ただし、コンテナーでエラーが発生した場合、コンテナーが手動で停止されるまで再起動が続きます。これにより、コードが不安定になり、データ損失が発生する可能性があります。

方法 2: Docker Compose を使用する

Docker Compose は、複数の Docker コンテナーを定義して実行できるツールです。コンテナと起動パラメータの関係をymlファイルで記述できます。次の構成を docker-compose.yml ファイルに追加します:

version: '3'

services:
  app:
    build: .
    restart: always

その後、docker-compose コマンドを使用してコンテナーを起動できます:

docker-compose up -d

restart: always オプションは、コンテナーが異常終了したときにコンテナーを自動的に再起動するように Docker に指示します。この方法の利点は、複数のコンテナを管理できることであり、便利で高速ですが、コンテナが常に再起動されるという問題がまだあります。

方法 3: デーモン プロセスを使用する

デーモン プロセスを使用することは、Docker コンテナーが終了しないようにするための信頼できる方法です。コンテナ内でデーモンを起動し、デーモンの監視下で Docker コンテナを実行します。コンテナに問題がある場合、デーモンはコンテナを再起動します。

次の例は、supervisor デーモンを使用して Node.js サービスを開始する例です:

  1. スーパーバイザーのインストール:
npm install -g supervisor
  1. supervisord.conf ファイルを作成し、次の内容を追加します:
[supervisord]
nodaemon=true

[program:app]
command=supervisor app.js
directory=/app
autostart=true
autorestart=true
user=root
  1. Dockerfile に次の構成を追加します:
RUN apt-get update && apt-get install -y supervisor

COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf

ミラーを生成してコンテナを起動します:

docker build -t IMAGE_NAME .
docker run -d IMAGE_NAME

デーモンを使用する利点は、コンテナの動作を柔軟に制御できることですが、追加の構成作業が必要であり、デーモンは、一部のシステム リソースを消費します。

方法 4: 外部監視を使用する

外部監視システムを使用して Docker コンテナを監視し、例外が発生した場合にコンテナを再起動すると、コンテナの動作をより柔軟に制御できます。コンテナに異常がある場合、監視システムはアラームの発行、ログの記録、コンテナの再起動などのアクションを実行できます。

たとえば、systemd を使用して Docker コンテナを監視できます。

  1. systemd ユニット ファイル (mydocker.service など) を作成します。 、ファイルの内容は次のとおりです。
[Unit]
Description=My Docker Container

[Service]
ExecStart=/usr/bin/docker start -a myapp
Restart=always
RestartSec=10s
ExecStop=/usr/bin/docker stop -t 2 myapp

[Install]
WantedBy=default.target

このファイルは、myapp という名前のコンテナーを定義します。コンテナーに問題が発生すると、systemd がコンテナーを自動的に再起動します。このサービスを有効にするには、systemctl コマンドを使用します。

sudo systemctl daemon-reload
sudo systemctl enable mydocker.service
sudo systemctl start mydocker.service

外部監視を使用する利点は、より柔軟でさまざまなサードパーティ監視システムを使用できることですが、追加の構成と設定が必要です。保守作業。

一般に、Docker コンテナを長期間実行し続ける方法は数多くありますが、それぞれに独自の長所と短所があります。具体的な選択は実際のニーズに基づいて行う必要があります。コンテナーを起動するときは、コンテナーの操作の安定性とセキュリティも考慮し、適切な自動化ツールを使用して手動操作を減らす必要があります。

以上がdocker がコンテナから出ないの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。