Docker-контейнер не работает
я полностью новичок в docker. Я попытался запустить выходящий контейнер следующим образом,
- я перечислил все доступные контейнеры, используя
docker ps -a
. В нем перечислены следующие, -
я ввел следующие команды, чтобы запустить контейнер, который находится в стадии выхода и войти в терминал этого изображения.
docker start 79b3fa70b51d
docker 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:/#