반응형
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 |