> 운영 및 유지보수 > Docker > 도커는 컨테이너를 종료하지 않습니다

도커는 컨테이너를 종료하지 않습니다

王林
풀어 주다: 2023-05-16 20:35:36
원래의
2447명이 탐색했습니다.

Docker 컨테이너를 계속 실행하고 종료하지 않으려면 여러 가지 방법이 있습니다. 이 글에서는 일반적으로 사용되는 몇 가지 방법과 그 장단점을 다룰 것입니다.

방법 1: --restart 옵션을 사용하세요

Docker는 컨테이너가 비정상적으로 종료될 때 컨테이너를 자동으로 다시 시작하는 --restart 옵션을 제공합니다. 세 가지 선택적 값, 즉 no, on-failurealways가 있으며 각각 다시 시작하지 않음, 비정상적인 종료 시 다시 시작 및 항상에 해당합니다. 재시작. 구체적인 예: --restart,可以在容器异常退出时自动重启容器。有三种可选值,分别是 noon-failurealways,分别对应不重启、非正常退出时重启和总是重启。具体示例:

docker run --restart=always IMAGE_NAME
로그인 후 복사

使用 --restart 选项的优点是简单易用,只需要在命令行中添加一个选项即可。但如果容器出现了错误,它也会一直重启,直到手动停止容器。这可能会导致代码的不稳定性和数据的丢失。

方法二:使用 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 在容器异常退出时自动重启容器。这种方法的优点是可以管理多个容器,方便快捷,但是依然存在容器一直重启的问题。

方法三:使用守护进程

使用守护进程是保持 Docker 容器不退出的一种可靠的方法。在容器中启动一个守护进程,然后让 Docker 容器在守护进程的监控下运行。如果容器出现问题,守护进程会重新启动容器。

以下是一个例子,使用 supervisor 守护进程启动一个 Node.js 服务:

  1. 安装 supervisor:
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
로그인 후 복사

使用守护进程的优点是可以灵活地控制容器的行为,但是需要一些额外的配置工作,并且需要启动一个守护进程,占用一些系统资源。

方法四:使用外部监控

使用外部监控系统来监控 Docker 容器并在异常时重启容器,可以更加灵活地控制容器的行为。在容器异常时,监控系统可以采取一些操作,例如发出警报、记录日志、重启容器等。

例如可以使用 systemd 来监控 Docker 容器:

  1. 创建一个 systemd unit 文件,例如 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
로그인 후 복사
--restart 옵션 사용의 장점은 간단하고 사용하기 쉽다는 것입니다. 명령줄에 옵션을 추가하기만 하면 됩니다. 그러나 컨테이너에 오류가 발생하면 컨테이너가 수동으로 중지될 때까지 계속해서 다시 시작됩니다. 이로 인해 코드가 불안정해지고 데이터가 손실될 수 있습니다.

방법 2: Docker Compose 사용

Docker Compose는 여러 Docker 컨테이너를 정의하고 실행할 수 있는 도구입니다. yml 파일을 통해 컨테이너와 시작 매개변수 간의 관계를 설명할 수 있습니다. docker-compose.yml 파일에 다음 구성을 추가합니다: 🎜rrreee🎜그런 다음 docker-compose 명령을 사용하여 컨테이너를 시작할 수 있습니다: 🎜rrreee🎜 restart: Always 옵션은 컨테이너가 비정상적으로 종료될 경우 Docker에게 컨테이너를 자동으로 다시 시작하도록 지시합니다. 이 방법의 장점은 여러 개의 컨테이너를 관리할 수 있어 편리하고 빠르지만, 여전히 컨테이너가 항상 다시 시작되는 문제가 있습니다. 🎜🎜방법 3: 데몬 사용 🎜🎜데몬을 사용하는 것은 Docker 컨테이너가 종료되지 않도록 하는 안정적인 방법입니다. 컨테이너에서 데몬 프로세스를 시작한 다음 데몬 프로세스의 감독 하에 Docker 컨테이너가 실행되도록 합니다. 컨테이너에 문제가 있으면 데몬이 컨테이너를 다시 시작합니다. 🎜🎜다음은 <code>supervisor 데몬을 사용하여 Node.js 서비스를 시작하는 예입니다. 🎜
  1. 감독자 설치:
rrreee
  1. supervisord.conf 파일을 생성하고 다음 내용을 추가합니다:
rrreee
  1. 다음 구성을 추가합니다 Dockerfile에서:
rrreee🎜이미지 생성 및 컨테이너 시작: 🎜rrreee🎜데몬을 사용하면 컨테이너의 동작을 유연하게 제어할 수 있다는 장점이 있지만 몇 가지 추가 구성 작업이 필요합니다. , 일부 시스템 리소스를 차지하는 데몬을 시작해야 합니다. 🎜🎜방법 4: 외부 모니터링 사용🎜🎜외부 모니터링 시스템을 사용하여 Docker 컨테이너를 모니터링하고 예외가 발생할 때 컨테이너를 다시 시작하면 컨테이너의 동작을 보다 유연하게 제어할 수 있습니다. 컨테이너가 비정상일 경우 모니터링 시스템은 알람 발생, 로그 기록, 컨테이너 재시작 등의 조치를 취할 수 있습니다. 🎜🎜예를 들어 systemd를 사용하여 Docker 컨테이너를 모니터링할 수 있습니다. 🎜
  1. 다음을 사용하여 mydocker.service와 같은 systemd 단위 파일을 생성합니다. 콘텐츠:
rrreee🎜이 파일은 myapp이라는 컨테이너를 정의합니다. 컨테이너에 문제가 발생하면 systemd가 자동으로 컨테이너를 다시 시작합니다. 이 서비스를 활성화하려면 systemctl 명령을 사용하세요. 🎜rrreee🎜외부 모니터링을 사용하면 더 유연하고 다양한 타사 모니터링 시스템을 사용할 수 있다는 장점이 있지만 추가 구성 및 유지 관리 작업이 필요합니다. 🎜🎜일반적으로 Docker 컨테이너를 오랫동안 실행하는 방법에는 여러 가지가 있으며 각각 장단점이 있습니다. 구체적인 선택은 실제 요구 사항을 기반으로 해야 합니다. 컨테이너를 시작할 때 컨테이너 운영의 안정성과 보안도 고려해야 하며, 적절한 자동화 도구를 사용하여 수동 작업을 줄여야 합니다. 🎜

위 내용은 도커는 컨테이너를 종료하지 않습니다의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿