반응형
    
    
    
  
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반응형
    
    
    
  'Product > Docker' 카테고리의 다른 글
| [Docker] docker run 사용법 (1) | 2022.02.22 | 
|---|---|
| [Docker] MySQL 초기 DB/User/Data SQL 세팅 (0) | 2022.02.18 | 
| [Docker] Oracle 11g 설치 (0) | 2022.02.09 | 
| [Docker] Container Root 계정으로 접속 (0) | 2022.01.12 | 
| [Docker] Private Nuget : BaGet 서버 구축 (0) | 2021.07.21 |