지금까지 읽은 튜토리얼에 따르면 ” docker run -d
“를 사용 하면 이미지에서 컨테이너가 시작되고 컨테이너가 백그라운드에서 실행됩니다. 이것이 어떻게 보이는지, 우리는 이미 컨테이너 ID를 가지고 있음을 알 수 있습니다.
root@docker:/home/root# docker run -d centos
605e3928cdddb844526bab691af51d0c9262e0a1fc3d41de3f59be1a58e1bd1d
그러나 ” docker ps
“를 실행하면 아무 것도 반환되지 않았습니다.
” docker ps -a
“를 시도했는데 컨테이너가 이미 종료 된 것을 볼 수 있습니다.
root@docker:/home/root# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
605e3928cddd centos:latest "/bin/bash" 31 minutes ago Exited (0) 31 minutes ago kickass_swartz
내가 잘못한 게 있습니까? 이 문제를 어떻게 해결할 수 있습니까?
답변
CentOS는 dockerfile은 기본 명령이 있습니다 bash
.
즉, 백그라운드 ( -d
) 에서 실행 하면 셸이 즉시 종료됩니다.
2017 업데이트
고정 표시기의 권한 부여의 최신 버전은 모두 컨테이너를 실행하는 분리 모드 와 의 전경 모드 ( -t
, -i
또는 -it
)
이 경우 추가 명령이 필요하지 않으며 이것으로 충분합니다.
docker run -t -d centos
배쉬는 백그라운드에서 기다립니다.
즉 처음에보고 하기 Kalyani – 차우 의 대답 과에 설명 저지 콩 의 대답 .
vonc@voncvb:~$ d ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4a50fd9e9189 centos "/bin/bash" 8 seconds ago Up 2 seconds wonderful_wright
docker run -t -d alpine/git
프로세스를 유지하지 않습니다.
해야했다 :docker run --entrypoint "/bin/sh" -it alpine/git
원래 답변 (2015)
이 기사 에서 언급했듯이 :
로 실행하는 대신 하나의 명령으로 컨테이너를 실행할 수 있으며 + +를 눌러 컨테이너의 터미널을 분리 할 필요가 없으므로
docker run -i -t image your-command
사용하는-d
것이 좋습니다 .CtrlPQ그러나
-d
옵션에 문제가 있습니다. 명령이 포 그라운드에서 실행되고 있지 않으면 컨테이너가 즉시 중지됩니다 .
Docker를 사용하려면 포 그라운드에서 계속 실행해야합니다. 그렇지 않으면 응용 프로그램이 컨테이너를 중지했다가 종료한다고 생각합니다.문제는 일부 응용 프로그램이 포 그라운드에서 실행되지 않는다는 것입니다. 어떻게 더 쉽게 만들 수 있습니까?
이 상황에서
tail -f /dev/null
명령에 추가 할 수 있습니다 .
이렇게하면 기본 명령이 백그라운드에서 실행 되더라도 테일이 전경에서 계속 실행되므로 컨테이너가 중지되지 않습니다.
그래서 이것은 작동합니다 :
docker run -d centos tail -f /dev/null
A docker ps
는 centos 컨테이너가 여전히 실행 중임을 나타냅니다.
답변
이 답변 에 따르면 -t
플래그를 추가 하면 백그라운드에서 실행될 때 컨테이너가 종료되지 않습니다. 그런 다음을 사용 docker exec -i -t <image> /bin/bash
하여 쉘 프롬프트로 들어갈 수 있습니다 .
docker run -t -d <image> <command>
도움말에 “의사 TTY 할당”이라는 말이 있지만 -t 옵션 이 잘 설명되어 있지 않은 것 같습니다 .
답변
배경
Docker 컨테이너는 프로세스를 실행하는 프로세스 ( “명령”또는 “입력 지점”)를 실행합니다. 명령이 계속 실행되는 한 컨테이너는 계속 실행됩니다.
귀하의 경우 명령 ( /bin/bash
기본적으로 on centos:latest
)은 즉시 종료됩니다 (bash는 터미널에 연결되어 있지 않고 실행할 것이 없을 때 bash처럼).
일반적으로 컨테이너를 데몬 모드 ( -d
)로 실행하면 컨테이너는 일종의 데몬 프로세스 (예 :)를 실행 httpd
합니다. 이 경우 httpd 데몬이 실행되는 동안 컨테이너는 활성 상태로 유지됩니다.
컨테이너 내부에서 데몬 프로세스를 실행하지 않고 컨테이너를 활성 상태로 유지하려고합니다. 이것은 다소 이상합니다 (컨테이너가와 상호 작용할 때까지 유용한 작업을 수행하지 않기 때문에 docker exec
), 그러나 이와 같은 작업을 수행하는 것이 합리적 일 수 있습니다.
(컨테이너 내부에 bash 프롬프트가 표시 되었습니까? 쉽습니다. docker run -it centos:latest
)
해결책
컨테이너를 데몬 모드에서 무기한으로 유지하는 간단한 방법 sleep infinity
은 컨테이너의 명령으로 실행하는 것입니다. 이것은 데몬 모드에서 TTY 할당과 같은 이상한 일을하지 않습니다. sleep
기본 명령으로 사용하는 것과 같은 이상한 일에 의존하지만 .
$ docker run -d centos:latest sleep infinity
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d651c7a9e0ad centos:latest "sleep infinity" 2 seconds ago Up 2 seconds nervous_visvesvaraya
대체 솔루션
cjsimon이 나타내는 것처럼이 -t
옵션은 “의사 -tty “를 할당합니다. 이것은 bash가 대화 형 TTY에 연결되어 있다고 생각하기 때문에 bash가 계속 무한대로 실행되도록합니다 (통과하지 않으면 특정 TTY와 상호 작용할 방법이 없지만 -i
). 어쨌든,이 트릭도 수행해야합니다.
$ docker run -t -d centos:latest
-t
다른 이상한 상호 작용을 일으킬 지 100 % 확실하지 않습니다 . 그렇다면 아래에 의견을 남겨주십시오.
답변
안녕하세요.이 문제는 컨테이너에 실행중인 응용 프로그램이 없으면 도커 컨테이너가 종료되기 때문입니다.
-d
옵션은 단지 데몬 모드에서 컨테이너를 실행하는 것입니다.
따라서 컨테이너를 지속적으로 실행하는 트릭은 응용 프로그램을 계속 실행하는 docker의 셸 파일을 가리 킵니다 .start.sh 파일을 사용해 볼 수 있습니다
Eg: docker run -d centos sh /yourlocation/start.sh
이 start.sh는 끝없는 응용 프로그램을 가리켜 야합니다.
응용 프로그램을 실행하지 않으려는 경우 monit
도커 컨테이너를 계속 실행하는 설치 할 수 있습니다 . 컨테이너를 계속 작동시키는 데이 두 가지 사례가 효과가 있는지 알려주십시오.
모두 제일 좋다
답변
다음 중 하나를 사용하여 원하는 것을 달성 할 수 있습니다.
docker run -t -d <image-name>
또는
docker run -i -d <image-name>
또는
docker run -it -d <image-name>
다른 답변 (예 : tail -f / dev / null)에서 제안한 명령 매개 변수는 완전히 선택 사항이므로 컨테이너가 백그라운드에서 계속 실행되도록 할 필요는 없습니다.
또한 Docker 설명서에는 -i 및 -t 옵션을 결합하면 셸처럼 작동한다고 제안합니다.
보다:
답변
이 코드 스 니펫은 ENTRYPOINT
docker 파일에서 실행 됩니다.
while true
do
echo "Press [CTRL+C] to stop.."
sleep 1
done
빌드 된 도커 이미지를 다음과 같이 실행하십시오.
docker run -td <image name>
컨테이너 쉘에 로그인하십시오.
docker exec -it <container id> /bin/bash
답변
다음과 같이 명령을 실행하십시오.
docker run -t -d <image-name>
포트를 지정하려면 다음과 같이 명령하십시오.
docker run -t -d -p <port-no> <image-name>
다음 명령을 사용하여 실행중인 컨테이너를 확인하십시오.
docker ps
![](http://daplus.net/wp-content/uploads/2023/04/coupang_part-e1630022808943-2.png)