Docker-контейнер не работает
я полностью новичок в docker. Я попытался запустить выходящий контейнер следующим образом,
- я перечислил все доступные контейнеры, используя
docker ps -a. В нем перечислены следующие,
-
я ввел следующие команды, чтобы запустить контейнер, который находится в стадии выхода и войти в терминал этого изображения.
docker start 79b3fa70b51ddocker exec -it 79b3fa70b51d binsh -
он бросает следующее ошибка.
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:/#
причина в том, что принятый ответ сказал. Я добавляю некоторую дополнительную информацию, которая может обеспечить дальнейшее понимание этого вопроса.
- состояние контейнера включает в себя
Created,Running,Stopped,Exited,Deadи другие, как я знаю. - когда мы выполняем
docker create, демон docker создаст контейнер со статусомCreated. - , когда
docker start, docker daemon запустит существующий контейнер какой статус может будьCreatedилиStopped. - когда мы выполняем
docker run, docker daemon закончит его за два шаги:docker createиdocker start. - , когда
docker stop, очевидно, docker daemon остановит контейнер. Таким образом, контейнер будет вStoppedстатус. - приходя самый важный, контейнер на самом деле воображает себя
проведение длительного процесса в нем. Когда процесс завершается,
процесс удерживания контейнера вышел бы тоже. Таким образом, статус этого
контейнер был бы
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:/#