Docker 컨테이너를 계속 실행하고 종료하지 않으려면 여러 가지 방법이 있습니다. 이 글에서는 일반적으로 사용되는 몇 가지 방법과 그 장단점을 다룰 것입니다.
Docker는 컨테이너가 비정상적으로 종료될 때 컨테이너를 자동으로 다시 시작하는 --restart
옵션을 제공합니다. 세 가지 선택적 값, 즉 no
, on-failure
및 always
가 있으며 각각 다시 시작하지 않음, 비정상적인 종료 시 다시 시작 및 항상에 해당합니다. 재시작. 구체적인 예: --restart
,可以在容器异常退出时自动重启容器。有三种可选值,分别是 no
、on-failure
和 always
,分别对应不重启、非正常退出时重启和总是重启。具体示例:
docker run --restart=always IMAGE_NAME
使用 --restart
选项的优点是简单易用,只需要在命令行中添加一个选项即可。但如果容器出现了错误,它也会一直重启,直到手动停止容器。这可能会导致代码的不稳定性和数据的丢失。
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 服务:
npm install -g supervisor
supervisord.conf
文件,添加以下内容:[supervisord] nodaemon=true [program:app] command=supervisor app.js directory=/app autostart=true autorestart=true user=root
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 容器:
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 서비스를 시작하는 예입니다. 🎜supervisord.conf
파일을 생성하고 다음 내용을 추가합니다:systemd
를 사용하여 Docker 컨테이너를 모니터링할 수 있습니다. 🎜mydocker.service
와 같은 systemd 단위 파일을 생성합니다. 콘텐츠: myapp
이라는 컨테이너를 정의합니다. 컨테이너에 문제가 발생하면 systemd
가 자동으로 컨테이너를 다시 시작합니다. 이 서비스를 활성화하려면 systemctl
명령을 사용하세요. 🎜rrreee🎜외부 모니터링을 사용하면 더 유연하고 다양한 타사 모니터링 시스템을 사용할 수 있다는 장점이 있지만 추가 구성 및 유지 관리 작업이 필요합니다. 🎜🎜일반적으로 Docker 컨테이너를 오랫동안 실행하는 방법에는 여러 가지가 있으며 각각 장단점이 있습니다. 구체적인 선택은 실제 요구 사항을 기반으로 해야 합니다. 컨테이너를 시작할 때 컨테이너 운영의 안정성과 보안도 고려해야 하며, 적절한 자동화 도구를 사용하여 수동 작업을 줄여야 합니다. 🎜위 내용은 도커는 컨테이너를 종료하지 않습니다의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!