Product/Docker

[Docker] Docker run 백그라운드 실행 자동 종료 방지 (Infinity loop)

Codit Develop 2022. 5. 12. 11:16
반응형

Docker run background

docker run -d를 사용하여 entrypoint 또는 cmd가 설정되어 있지 않은 이미지로 컨테이너 실행 시

$ docker run -d --name test ubuntu:20.04
589f7b7cfc6ead8950c92c5e6b09b7e7a4f0bbd89b7557a7b384a2d3c5360a70

$ docker ps -a
CONTAINER ID   IMAGE          COMMAND   CREATED          STATUS                      PORTS     NAMES
589f7b7cfc6e   ubuntu:20.04   "bash"    31 seconds ago   Exited (0) 28 seconds ago             test

위와 같이 컨테이너가 지속적으로 실행시킬 프로그램을 찾지 못하고 자동으로 종료된다.

자동으로 종료되지 않게 설정하기 위해서는 몇 가지 설정이 필요하다.

sleep infinity

docker run 명령어 마지막에 sleep infinity를 추가할 경우 정상적으로 컨테이너가 유지된다.

docker run

$ docker run -d --name test ubuntu:20.04 sleep infinity
347ae2a4d398d5f04cde0df0b5a4243d6ce52e515d1dd6da0e54a7ee1aa3153b

$ docker ps -a
CONTAINER ID   IMAGE          COMMAND            CREATED          STATUS          PORTS     NAMES
347ae2a4d398   ubuntu:20.04   "sleep infinity"   11 seconds ago   Up 11 seconds             test

docker-compose

version: '3.4'

services:
  test-ubuntu:
    container_name: test-ubuntu
    image: ubuntu:20.04
    command: sleep infinity
$ docker-compose up -d
[+] Running 1/1
 - Container test-ubuntu  Started   

$ docker ps -a
CONTAINER ID   IMAGE          COMMAND            CREATED         STATUS          PORTS     NAMES
4118a6406472   ubuntu:20.04   "sleep infinity"   3 minutes ago   Up 23 seconds             test-ubuntu

tail -f /dev/null

이전부터 많이 사용한 방식으로, null device(/dev/null) 라고 불리는 리눅스 특수 장치 파일을 계속 읽음으로써 컨테이너 작업을 유지시키는 방식이다.

필자가 테스트 한 결과, run 시 아래와 같은 오류가 발생하며, docker-compose 및 Dockerfile로는 정상적으로 동작한다.
이미지에 따라 다를 수 있음으로, 위의 sleep infinity를 경우에 따라 혼용하여 사용하면 된다.

docker run

$ docker run -d --name test --entrypoint "tail -f /dev/null" ubuntu:20.04
37a992c25eeab81805a57da3ab08241315ed2745c66b15202235b2037ed4d1c8
docker: Error response from daemon: failed to create shim: OCI runtime create failed: container_linux.go:380: starting container process caused: exec: "tail -f /dev/null": stat tail -f /dev/null: no such file or directory: unknown.

Dockerfile

FROM ubuntu:20.04

CMD tail -f /dev/null
$ docker build -t test:test3 .
[+] Building 0.2s (5/5) FINISHED
 => [internal] load build definition from Dockerfile       
 => => transferring dockerfile: 79B      
 => [internal] load .dockerignore                                                                                                 
 => => transferring context: 2B                                                                                                   
 => [internal] load metadata for docker.io/library/ubuntu:20.04                                                                   
 => CACHED [1/1] FROM docker.io/library/ubuntu:20.04                                                                             
 => exporting to image                                                                                                           
 => => exporting layers                                                                                                           
 => => writing image sha256:f9737ee65448285d8ab5a9e85299a1baa5375ebd9905d891b31ea7110e2e3982                                     
 => => naming to docker.io/library/test:test3             

 Use 'docker scan' to run Snyk tests against images to find vulnerabilities and learn how to fix them

$ docker run -d --name test test:test3
d8a46d38906418b9aac9cfd4968e90669c37ac8d4d5f56551c03095d4fc1278d

$ docker ps -a
CONTAINER ID   IMAGE          COMMAND                  CREATED              STATUS              PORTS     NAMES
d8a46d389064   test:test3     "/bin/sh -c 'tail -f…"   10 seconds ago       Up 8 seconds                  test

docker-compose

version: '3.4'

services:
  test-ubuntu:
    container_name: test-ubuntu
    image: ubuntu:20.04
    command: tail -f /dev/null
$ docker-compose up -d          
[+] Running 1/1
 - Container test-ubuntu  Started            

$ docker ps -a
CONTAINER ID   IMAGE          COMMAND               CREATED         STATUS         PORTS     NAMES
8045247274e3   ubuntu:20.04   "tail -f /dev/null"   4 seconds ago   Up 3 seconds             test-ubuntu
반응형