[docker] Docker-컨테이너가 실행되고 있지 않습니다.
나는 완전히 도커의 초보자입니다. 다음과 같이 종료 된 컨테이너를 시작하려고했습니다.
-
을 사용하여 사용 가능한 모든 컨테이너를 나열했습니다
docker ps -a
. 다음과 같이 나열되었습니다. -
종료 단계에있는 컨테이너를 시작하고 해당 이미지의 터미널로 들어가기 위해 다음 명령을 입력했습니다.
docker start 79b3fa70b51d docker exec -it 79b3fa70b51d /bin/sh
-
다음 오류가 발생합니다.
FATA[0000] Error response from daemon: Container 79b3fa70b51d is not running
하지만 docker start 79b3fa70b51d
. 모든 것이 정상적으로 작동하면 정상적인 출력으로 컨테이너 ID를 던집니다. 이 오류의 원인이 무엇인지 잘 모르겠습니다. 이에 대한 원인과 제안에 대한 아이디어는 저에게 큰 도움이 될 것입니다. 미리 감사드립니다.
답변
컨테이너 79b3fa70b51d
는 echo
.
즉, 시작, 에코 및 즉시 종료됩니다.
다음 docker exec
명령 은 컨테이너에 자신을 연결하고 명령을 실행하기 위해 실행중인 것을 찾지 못합니다. 너무 늦었습니다. 컨테이너가 이미 종료되었습니다.
이
docker exec
명령은 실행중인 컨테이너에서 새 명령을 실행합니다.사용하여 시작된 명령
docker exec
은 컨테이너의 기본 프로세스 (PID 1)가 실행되는 동안에 만 실행됩니다.
답변
기본적으로 Docker 컨테이너는 컨테이너에서 실행중인 작업이없는 경우 즉시 종료됩니다.
컨테이너를 백그라운드에서 계속 실행하려면 다음을 사용하여 실행하십시오 --detach
(또는-d
) 인수를 .
예를 들어:
docker pull debian
docker run -t -d --name my_debian debian
e7672d54b0c2
docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e7672d54b0c2 debian "bash" 3 minutes ago Up 3 minutes my_debian
#now you can execute command on the container
docker exec -it my_debian bash
root@e7672d54b0c2:/#
답변
기본 프로세스를 다시 시작할 수없는 경우 (충분히 오래) commit
컨테이너가 새 이미지로 이동하고이 이미지에서 새 컨테이너를 실행할 가능성도 있습니다 . 이것이 일반적인 모범 사례 워크 플로 는 아니지만 실패한 스크립트를 가끔 디버그하는 것이 정말 유용하다는 것을 알게되었습니다.
docker exec -it 6198ef53d943 bash
Error response from daemon: Container 6198ef53d9431a3f38e8b38d7869940f7fb803afac4a2d599812b8e42419c574 is not running
docker commit 6198ef53d943
sha256:ace7ca65e6e3fdb678d9cdfb33a7a165c510e65c3bc28fecb960ac993c37ef33
docker run -it ace7ca65e6e bash
root@72d38a8c787d:/#
답변
먼저 도커 컨테이너를 시작해야합니다.
ankit@ankit-HP-Notebook:~$ sudo docker start 3a19b39ea021
3a19b39ea021
그 후 도커 컨테이너를 확인하십시오.
ankit@ankit-HP-Notebook:~$ sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3a19b39ea021 coreapps/ubuntu16.04:latest "bash" 13 hours ago
Up 9 seconds ubuntu1
455b66057060 hello-world "/hello" 4 weeks ago
Exited (0) 4 weeks ago vigorous_bardeen
그런 다음 아래 명령을 사용하여 실행하십시오.
ankit@ankit-HP-Notebook:~$ sudo docker exec -it 3a19b39ea021 bash
root@3a19b39ea021:/#
답변
이는 스크립트 가 요청을 기다리는 서비스를 시작하지 않는 이미지에서 발생 하므로 컨테이너는 스크립트의 끝에서 종료됩니다.
이는 일반적으로 대부분의 기본 OS 이미지 (centos, debian 등) 또는 노드 이미지의 경우입니다.
가장 좋은 방법은 이미지 를 대화 형 모드 로 실행하는 것입니다. 입니다. 노드 이미지를 사용한 아래 예 :
docker run -it node /bin/bash
출력은
root@cacc7897a20c:/# echo $SHELL
/bin/bash
답변
여기에 저에게 효과적이었습니다.
컨테이너 ID를 얻고 다시 시작하십시오.
docker ps -a --no-trunc
ace7ca65e6e3fdb678d9cdfb33a7a165c510e65c3bc28fecb960ac993c37ef33
docker restart ace7ca65e6e3fdb678d9cdfb33a7a165c510e65c3bc28fecb960ac993c37ef33
답변
그 이유는 받아 들여진 대답이 말한 것입니다. 이 문제에 대한 이해를 돕기 위해 몇 가지 추가 정보를 추가합니다.
- 컨테이너의 상태를 포함
Created
,Running
,Stopped
,
Exited
,Dead
등 나는 알고있다. - 실행
docker create
하면 docker 데몬은 상태가Created
. - 때
docker start
docker 데몬은 상태가Created
또는 인 기존 컨테이너를 시작합니다Stopped
. - 우리가 실행되면
docker run
, 고정 표시기 데몬은 두 단계를 완료합니다 :docker create
와docker start
. - 때
docker stop
, 분명히 고정 표시기 데몬은 컨테이너를 중지합니다. 따라서 컨테이너는Stopped
상태가됩니다. - 가장 중요한 것은 컨테이너가 실제로 오랜 시간 프로세스를 보유하고 있다고 상상합니다. 프로세스가 종료되면 컨테이너 보유 프로세스도 종료됩니다. 따라서이 컨테이너의 상태는
Exited
.
프로세스는 언제 종료됩니까? 다시 말해, 프로세스는 무엇이며 어떻게 시작 했습니까?
대답은 CMD
dockerfile 또는 command
다음 표현식에 있으며 bash
일부 이미지에는 기본적으로 ubutu : 18.04가 있습니다.
docker run ubuntu:18.04 [command]