Docker 컨테이너가 항상 실행되도록 보호하는 방법은 무엇입니까?

Docker 컨테이너가 항상 실행되도록 보호하는 방법은 무엇입니까?

여러 개발자 랩톱에서 실행되는 HBase Docker 컨테이너가 있습니다. 개발자가 노트북을 닫으면 Docker 컨테이너는 필연적으로 종료되고 실행이 중지됩니다.

이것이 컨테이너를 호출하는 방법입니다.

$ docker run -d --hostname hbase-db --name hbase \
     -p 2181:2181   -p 8080:8080   -p 8085:8085   -p 9090:9090 -p 9095:9095 \
     -p 16000:16000 -p 16010:16010 -p 16201:16201 -p 16301:16301 \
     harisekhon/hbase

질문

이 컨테이너가 죽으면 자동으로 다시 시작되도록 어떻게 보호할 수 있나요?

답변1

Docker 다시 시작 전략

Docker는 이 문제를 해결하기 위해 다음과 같은 기능을 제공합니다.Docker 다시 시작 전략:

도커가 제공하는정책 다시 시작컨테이너가 종료될 때 또는 Docker가 다시 시작될 때 컨테이너가 자동으로 시작되는지 여부를 제어합니다. 다시 시작 정책은 연결된 컨테이너가 올바른 순서로 시작되도록 보장합니다. Docker에서는 다시 시작 전략을 사용하고 프로세스 관리자를 사용하여 컨테이너를 시작하지 않도록 권장합니다.

재시작 전략 유형:

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.

unless-stopped      Restart the container unless it is explicitly stopped or 
                    Docker itself is stopped or restarted.

always              Always restart the container if it stops.

용법

그런 다음 다음과 같이 다시 시작 전략을 사용할 수 있습니다.

$ docker run -dit --restart always redis

지침

  • 다시 시작 정책은 컨테이너가 성공적으로 시작된 후에만 적용됩니다. 이 경우 성공적인 시작은 컨테이너가 최소 10초 동안 시작되었고 Docker가 이를 모니터링하기 시작했음을 의미합니다. 이렇게 하면 전혀 시작되지 않는 컨테이너가 다시 시작 루프에 들어가는 것을 방지할 수 있습니다.

  • 컨테이너를 수동으로 중지하면 Docker 데몬이 다시 시작되거나 컨테이너가 수동으로 다시 시작될 때까지 해당 다시 시작 정책이 무시됩니다. 이는 재시작 루프를 방지하기 위한 또 다른 시도입니다.

  • 다시 시작 정책은 컨테이너에만 적용됩니다. Swarm 서비스의 다시 시작 정책 구성이 다릅니다. 서비스 재시작과 관련된 플래그를 봅니다.

여기서 우리는 사용할 것입니다Hello World 도커 컨테이너이것이 어떻게 작동하는지 설명하기 위해.

먼저 아래로 당깁니다.

$ docker pull hello-world
Using default tag: latest
Trying to pull repository docker.io/library/hello-world ...
latest: Pulling from docker.io/library/hello-world
9db2ca6ccae0: Pull complete
Digest: sha256:4b8ff392a12ed9ea17784bd3c9a8b1fa3299cac44aca35a85c90c5e3c7afacdc
Status: Downloaded newer image for docker.io/hello-world:latest
$ 

컨테이너를 다운로드한 후 실행해 보겠습니다.

$ docker run -dit --restart always hello-world
0f6a61dddd3b667727a20df2c198941b2202653a71b6c86b8ace7b236bafc974

몇 가지를 실행하면 docker ps계속해서 다시 시작되는 것을 볼 수 있습니다.

$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                              PORTS               NAMES
0f6a61dddd3b        hello-world         "/hello"            27 seconds ago      Up Less than a second                                   upbeat_brown

...time passes...

$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                              PORTS               NAMES
0f6a61dddd3b        hello-world         "/hello"            5 minutes ago       Restarting (0) About a minute ago                       upbeat_brown

...time passes...
$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                         PORTS               NAMES
0f6a61dddd3b        hello-world         "/hello"            10 minutes ago      Restarting (0) 3 minutes ago                       upbeat_brown

Docker 로그를 보면 여러 번 다시 시작된 것을 확인할 수 있습니다.

$ docker logs 0f6a61dddd3b -f | grep "Hello from Docker"
Hello from Docker!
Hello from Docker!
Hello from Docker!
Hello from Docker!
Hello from Docker!
Hello from Docker!
Hello from Docker!
Hello from Docker!
Hello from Docker!
Hello from Docker!
Hello from Docker!
Hello from Docker!
Hello from Docker!

완료되면 컨테이너가 영원히 다시 시작되지 않도록 컨테이너를 중지해야 합니다.

$ docker stop 0f6
0f6

당신의 수정

문제를 해결하려면 다음과 같이 HBase Docker 컨테이너를 실행하세요.

$ docker run -d --hostname hbase-db --name hbase --restart always \
    -p 2181:2181   -p 8080:8080   -p 8085:8085   -p 9090:9090   -p 9095:9095 \
    -p 16000:16000 -p 16010:16010 -p 16201:16201 -p 16301:16301 \
    harisekhon/hbase

인용하다

관련 정보