programing

시스템 부팅 시 도커 컨테이너가 자동으로 시작되도록 하려면 어떻게 해야 합니까?

css3 2023. 9. 27. 18:03

시스템 부팅 시 도커 컨테이너가 자동으로 시작되도록 하려면 어떻게 해야 합니까?

내가 운영할 도커 컨테이너가 있다고 가정하면, 내가 전화할 수 있습니다.

$ docker run ...

그리고 모든게 괜찮아요.시스템이 충돌하고 재부팅되는 경우 컨테이너를 자동으로 재시작하는 방식으로 실행할 수 있는 내장된 방법이 있습니까?

그렇다면 도커 컴포지트에서도 사용 가능한가요?

예, 도커에는 다음과 같은 재시작 정책이 있습니다.docker run --restart=always이 일을 처리할 겁니다composite.yml config 파일에서도 다음과 같이 사용할 수 있습니다.restart: always.

로그인을 수행한 사용자가 없더라도 컨테이너를 시작하려면(VirtualBox VM처럼 매번 시작만 하고 로그인하지 않으려는 경우)Ubuntu 16.04 LTS에 대해 수행한 단계는 다음과 같습니다.예를 들어 Oracle db 컨테이너를 설치했습니다.

$ docker pull alexeiled/docker-oracle-xe-11g
$ docker run -d --name=MYPROJECT_oracle_db --shm-size=2g -p 1521:1521 -p 8080:8080 alexeiled/docker-oracle-xe-11g
$ vim /etc/systemd/system/docker-MYPROJECT-oracle_db.service

다음 내용을 추가합니다.

[Unit]
Description=Redis container
Requires=docker.service
After=docker.service

[Service]
Restart=always
ExecStart=/usr/bin/docker start -a MYPROJECT_oracle_db
ExecStop=/usr/bin/docker stop -t 2 MYPROJECT_oracle_db

[Install]
WantedBy=default.target

시작할 때 서비스를 활성화합니다.

sudo systemctl enable docker-MYPROJECT-oracle_db.service

자세한 정보는 https://docs.docker.com/engine/admin/host_integration/ 에서 확인할 수 있습니다.

기본 재시작 정책은no.

생성된 컨테이너에 대해 다음을 사용합니다.docker update다시 시작 정책을 업데이트합니다.

docker update --restart=always 0576df221c0b

0576df221c0b컨테이너 ID입니다.

합니다.docker update --restart=on-failure <container ID or name>.

on-failure는 장애 시 컨테이너를 재시작할 뿐만 아니라 시스템 부팅 시에도 다시 시작합니다.

설명서에 따라 여러 개의 재시작 옵션이 있습니다.

Flag            Description
no              Do not automatically restart the container. (the default)
on-failure      Restart the container if it exits due to an error, which manifests as a non-zero exit code.
always          Always restart the container if it stops. If it is manually stopped, it is restarted only when Docker daemon restarts or the container itself is manually restarted. (See the second bullet listed in restart policy details)
unless-stopped  Similar to always, except that when the container is stopped (manually or otherwise), it is not restarted even after Docker daemon restarts.

컨테이너를 시작하고 시스템 재부팅 시 자동으로 재시작되도록 설정하려면 다음과 같이 하십시오.

docker run -d --restart unless-stopped ecstatic_ritchie

에.ecstatic_ritchie는 관심있는 컨테이너를 지정하는 예시적인 이름입니다. 사용합니다.docker ps -a모든 컨테이너 이름을 나열합니다.

시스템 재부팅 시 실행 중인 특정 컨테이너가 자동으로 시작되도록 하려면 다음과 같이 하십시오.

docker update --restart unless-stopped ecstatic_ritchie

시스템 재부팅 시 실행 중인 모든 컨테이너를 자동으로 시작하려면 다음과 같이 하십시오.

docker update --restart unless-stopped $(docker ps -q)

Docker 홈페이지에서 자세히 보기

1) 먼저 부팅 시 도커 서비스를 활성화해야 합니다.

$ sudo systemctl enable docker

도커 2) .yml 를 합니다.restart: always또는 도커 컨테이너가 있는 경우 restart=를 추가합니다.

docker run --restart=always합니다를 합니다.

꼭!

컨테이너를 수동으로 중지하면 도커 데몬이 재시작되거나 컨테이너가 수동으로 재시작될 때까지 해당 재시작 정책이 무시됩니다.

재시작 정책을 Docker 공식 페이지에 표시

3) 도커 컴포지트를 시작하려면 시스템을 재부팅하면 모든 서비스가 실행되므로 아래 명령을 한 번만 실행할 수 있습니다.

$ docker-compose up -d

설명서에서 더 많은 "신사한" 모드:

docker run -dit --restart unless-stopped <image_name>

다음 방법으로 항상 재시작하는 컨테이너를 실행할 수 있습니다.

$ docker run -dit --restart unless-stopped <image name OR image hash>

실행 중인 컨테이너의 구성을 변경하려면 다음과 같이 업데이트해야 합니다.

$ docker update --restart=<options> <container ID OR name>

컨테이너의 현재 정책을 보려면 위에서 먼저 다음 명령을 실행합니다.

docker inspect gateway | grep RestartPolicy -A 3

결국, 시스템 부팅 시 설치된 도커 데몬을 사용하도록 설정하는 것을 잊지 마십시오.

$ systemctl enable docker

재시작 정책의 전체 목록을 보려면 정책 재시작을 참조하십시오.

크론탭은 다음과 같은 용도로 사용됩니다.

@reboot sleep 10 ; docker start <container name> 2>&1 | /usr/bin/logger -t 'docker start'

로 .crontab -e요로 .crontab -l 크론탭을 합니다./etc/crontab

edit 07-09-2022 이 답변은 시스템 부팅 시 컨테이너 시작을 제어하기 위해 네이티브 도커 재시작 정책 및/또는 시스템D 서비스 장치를 사용하는 것에 대한 백업 또는 대안으로만 사용해야 합니다.

제가 이 답변을 언급한 유일한 이유는 시스템D 서비스 유닛 방식이 제대로 작동하기 위해서는 과도한 복잡성과 많은 것들로 인한 비합리적인 감정적 반응 때문인 것 같습니다. 왜냐하면 그러한 간단한 작업은 본질적으로 어떤 리눅스 박스에서도 간단하게 수행할 수 있어야 하기 때문입니다.

윈도우에서 온부트 컨테이너 시작을 달성하고 싶었습니다.

그래서 방금 시스템 부팅 시 실행되는 스케줄링된 작업을 만들었습니다.이 태스크는 단순히 "Docker for Windows.exe"(또는 도커 실행 파일 이름)를 시작합니다.

그러면 재시작 정책이 "항상"인 모든 컨테이너가 시작됩니다.

저는 리눅스 시스템을 실행하는 비슷한 문제가 있습니다.시스템 부팅 후 "docker ps"와 같은 방식으로 도커를 사용하는 명령을 입력하지 않으면 재시작 정책이 "정지되지 않은" 컨테이너가 자동으로 재시작되지 않습니다.저는 그 명령어가 단지 상태 정보를 보고할 것이라고 예상했기 때문에 놀랐습니다.다음으로 "systemctl status docker" 명령을 시도했습니다.도커 명령이 실행되지 않은 시스템에서 이 명령은 다음을 보고했습니다.

● docker.service - Docker Application Container Engine

   Loaded: loaded (/lib/systemd/system/docker.service; disabled; vendor preset: enabled)

     Active: inactive (dead)    TriggeredBy: ● docker.socket
       Docs: https://docs.docker.com

다른 도커 명령 없이 "docker ps"가 실행되었던 시스템에서 저는 다음을 얻었습니다.

● docker.service - Docker Application Container Engine
    Loaded: loaded (/lib/systemd/system/docker.service; disabled; vendor preset: enabled)

    Active: active (running) since Sun 2020-11-22 08:33:23 PST; 1h 25min ago

TriggeredBy: ● docker.socket
       Docs: https://docs.docker.com

   Main PID: 3135 (dockerd)
      Tasks: 13

    Memory: 116.9M
     CGroup: /system.slice/docker.service
             └─3135 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
 ... [various messages not shown ]

가장 유력한 설명은 도커가 컨테이너를 완전히 초기화하고 시작하기 전에 어떤 도커 명령을 기다린다는 것입니다.컨테이너에 필요한 모든 서비스를 초기화한 후 한 시점에서 systemd 단위 파일에서 "dockerps"를 실행할 수 있습니다.도커-온부트라는 파일을 넣어서 테스트해봤습니다./lib/systemd/system 디렉토리의 service는 다음 내용을 포함합니다.

[Unit]
# This service is provided to force Docker containers
# that should automatically restart to restart when the system
# is booted. While the Docker daemon will start automatically,
# it will not be fully initialized until some Docker command
# is actually run.  This unit merely runs "docker ps": any
# Docker command will result in the Docker daemon completing
# its initialization, at which point all containers that can be
# automatically restarted after booting will be restarted.
#
Description=Docker-Container Startup on Boot
Requires=docker.socket
After=docker.socket network-online.target containerd.service

[Service]
Type=oneshot
ExecStart=/usr/bin/docker ps

[Install]

WantedBy=multiuser.target

지금까지(이 서비스가 활성화된 상태에서 한 테스트) 컴퓨터가 부팅될 때 컨테이너가 시작되었습니다.도커 명령을 실행할 때까지 docker.service가 시작되지 않기 때문에 docker.service에 대한 종속성을 시도하지 않았습니다.다음 테스트는 도커 온 부트가 비활성화된 상태에서 수행됩니다(WantedBy 종속성이 자동으로 시작되는지 확인).

이에 대한 2021년 답은 이 블로그 게시물에 아주 멋지게 묘사되어 있습니다.기본적으로 도커는 설치되어 있지만 활성화되어 있지 않습니다.최신 Ubuntu(예: 20)를 사용하고 있으며 다음을 통해 도커를 설치한 경우apt, 당신이 해야 할 일은sudo systemctl enable --now docker.

그러면 systemd에서 도커 서비스를 활성화하고 아직 시작하지 않았다면 바로 시작할 수 있습니다.도커 서비스는 설치 시 활성화된 상태로 시작되지 않지만 도커 소켓을 사용하는 모든 도커 명령(예:docker ps)을 통해 systemd가 서비스를 시작합니다.서비스를 활성화하면 매번 부팅 시 시작됩니다.

언급URL : https://stackoverflow.com/questions/30449313/how-do-i-make-a-docker-container-start-automatically-on-system-boot