Codit Develop
Codit Develop
Codit Develop
전체 방문자
오늘
어제
  • 분류 전체보기 (146)
    • IT (1)
      • 스마트폰 (1)
    • Game (59)
      • DNF (0)
      • StarCraft2 (11)
      • LostArk (45)
      • Minecraft (3)
      • Elyon (0)
    • Develop (43)
      • Web (15)
      • PHP (2)
      • Laravel (0)
      • C# (11)
      • NodeJS (1)
      • Java (2)
      • Python (1)
      • Cordova (3)
      • Android (0)
      • WPF (1)
      • PowerShell (5)
      • Other (2)
      • Javascript (0)
    • OS (17)
      • Windows (6)
      • Linux (11)
    • Product (17)
      • Docker (10)
      • GitLab (3)
      • NuGet (2)
      • Git (1)
      • Nginx (1)
    • DB (7)
      • All-DB (2)
      • MariaDB (2)
      • MySQL (2)
      • Oracle (0)
      • MSSQL (1)
      • Cubrid (0)
    • PC (2)
      • 견적함 (2)
      • 정보 (0)

블로그 메뉴

    공지사항

    인기 글

    태그

    • docker
    • 몬스터
    • 모코코
    • html
    • 구릉지
    • 모험의 서
    • 스타2
    • 모험의
    • JavaScript
    • 뷰포인트
    • Linux
    • jQuery
    • 서
    • db
    • c#
    • 오즈혼
    • 씨앗
    • web
    • 개인복권디펜스
    • 아르테미스
    • 히든
    • MySQL
    • 모험의서
    • css
    • 디펜스
    • 개복디
    • 조합
    • 유디아
    • 숨겨진
    • 로스트아크

    최근 댓글

    최근 글

    티스토리

    hELLO · Designed By 정상우.
    Codit Develop
    Product/Docker

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

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

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

    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
    반응형
    저작자표시 비영리 변경금지

    '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
    • Docker run background
    • sleep infinity
    • tail -f /dev/null
    'Product/Docker' 카테고리의 다른 글
    • [Docker] docker run 사용법
    • [Docker] MySQL 초기 DB/User/Data SQL 세팅
    • [Docker] Oracle 11g 설치
    • [Docker] Container Root 계정으로 접속
    Codit Develop
    Codit Develop
    내가 보려고 만든 개발 블로그

    티스토리툴바

    단축키

    내 블로그

    내 블로그 - 관리자 홈 전환
    Q
    Q
    새 글 쓰기
    W
    W

    블로그 게시글

    글 수정 (권한 있는 경우)
    E
    E
    댓글 영역으로 이동
    C
    C

    모든 영역

    이 페이지의 URL 복사
    S
    S
    맨 위로 이동
    T
    T
    티스토리 홈 이동
    H
    H
    단축키 안내
    Shift + /
    ⇧ + /

    * 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.