[docker] Docker-컨테이너가 실행되고 있지 않습니다.

나는 완전히 도커의 초보자입니다. 다음과 같이 종료 된 컨테이너를 시작하려고했습니다.

  1. 을 사용하여 사용 가능한 모든 컨테이너를 나열했습니다 docker ps -a. 다음과 같이 나열되었습니다.

    docker 모든 이미지 나열

  2. 종료 단계에있는 컨테이너를 시작하고 해당 이미지의 터미널로 들어가기 위해 다음 명령을 입력했습니다.

    docker start 79b3fa70b51d
    docker exec -it 79b3fa70b51d /bin/sh
    
  3. 다음 오류가 발생합니다.

    FATA[0000] Error response from daemon: Container 79b3fa70b51d is not running

하지만 docker start 79b3fa70b51d. 모든 것이 정상적으로 작동하면 정상적인 출력으로 컨테이너 ID를 던집니다. 이 오류의 원인이 무엇인지 잘 모르겠습니다. 이에 대한 원인과 제안에 대한 아이디어는 저에게 큰 도움이 될 것입니다. 미리 감사드립니다.



답변

컨테이너 79b3fa70b51decho.

즉, 시작, 에코 및 즉시 종료됩니다.

다음 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


답변

그 이유는 받아 들여진 대답이 말한 것입니다. 이 문제에 대한 이해를 돕기 위해 몇 가지 추가 정보를 추가합니다.

  1. 컨테이너의 상태를 포함 Created, Running, Stopped,
    Exited, Dead등 나는 알고있다.
  2. 실행 docker create하면 docker 데몬은 상태가 Created.
  3. docker startdocker 데몬은 상태가 Created또는 인 기존 컨테이너를 시작합니다 Stopped.
  4. 우리가 실행되면 docker run, 고정 표시기 데몬은 두 단계를 완료합니다 : docker createdocker start.
  5. docker stop, 분명히 고정 표시기 데몬은 컨테이너를 중지합니다. 따라서 컨테이너는 Stopped상태가됩니다.
  6. 가장 중요한 것은 컨테이너가 실제로 오랜 시간 프로세스를 보유하고 있다고 상상합니다. 프로세스가 종료되면 컨테이너 보유 프로세스도 종료됩니다. 따라서이 컨테이너의 상태는 Exited.

프로세스는 언제 종료됩니까? 다시 말해, 프로세스는 무엇이며 어떻게 시작 했습니까?
대답은 CMDdockerfile 또는 command다음 표현식에 있으며 bash일부 이미지에는 기본적으로 ubutu : 18.04가 있습니다.

docker run ubuntu:18.04 [command]