Docker-контейнер не работает

я полностью новичок в docker. Я попытался запустить выходящий контейнер следующим образом,

  1. я перечислил все доступные контейнеры, используя docker ps -a. В нем перечислены следующие, docker list all images
  2. я ввел следующие команды, чтобы запустить контейнер, который находится в стадии выхода и войти в терминал этого изображения.

    docker start 79b3fa70b51d docker exec -it 79b3fa70b51d binsh

  3. он бросает следующее ошибка.

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

но когда я запускаю контейнер с помощью docker start 79b3fa70b51d. Он бросает идентификатор контейнера в качестве вывода, который является нормальным, если у него все работает нормально. Я не уверен, что вызывает эту ошибку. Любая идея о причинах и предложениях по этому поводу была бы очень полезна для меня. Спасибо заранее.

5 ответов


контейнер 79b3fa70b51d кажется, только сделать echo.

это означает, что он начинается, эхо, а затем немедленно выходит.

следующий docker exec команда не нашел бы его запущенным, чтобы прикрепиться к этому контейнеру и выполнить любую команду: слишком поздно. Контейнер уже вышел.

на docker exec команда запускает новую команду в работающем контейнере.

команда начала использовать docker exec будет работать только в то время как основной процесс контейнера (PID 1) выполняется


по умолчанию docker container выйдет немедленно, если у вас нет задачи, запущенной в контейнере.

чтобы контейнер работал в фоновом режиме, попробуйте запустить его с помощью --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:/#

причина в том, что принятый ответ сказал. Я добавляю некоторую дополнительную информацию, которая может обеспечить дальнейшее понимание этого вопроса.

  1. состояние контейнера включает в себя Created, Running, Stopped, Exited, Dead и другие, как я знаю.
  2. когда мы выполняем docker create, демон docker создаст контейнер со статусом Created.
  3. , когда docker start, docker daemon запустит существующий контейнер какой статус может будь Created или Stopped.
  4. когда мы выполняем docker run, docker daemon закончит его за два шаги:docker create и docker start.
  5. , когда docker stop, очевидно, docker daemon остановит контейнер. Таким образом, контейнер будет в Stopped статус.
  6. приходя самый важный, контейнер на самом деле воображает себя проведение длительного процесса в нем. Когда процесс завершается, процесс удерживания контейнера вышел бы тоже. Таким образом, статус этого контейнер был бы Exited.

когда процесс завершается? Другими словами, что это за процесс, как мы его начали?
Ответ CMD в dockerfile или command в следующем выражении, которая составляет bash по умолчанию в некоторых изображениях, т. е. ubutu: 18.04.

docker run ubuntu:18.04 [command]

прежде всего, мы должны запустить контейнер docker

ankit@ankit-HP-Notebook:~$  sudo docker start 3a19b39ea021

                        3a19b39ea021

после этого проверьте контейнер docker:

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:/#