Я совсем новичок в докере. Я попытался запустить закрытый контейнер, как показано ниже,
Я перечислил все доступные контейнеры, используя
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
. Он выдает идентификатор контейнера в качестве вывода, что является нормальным, если у него все работает нормально. Я не уверен, что вызывает эту ошибку. Любые идеи о причинах и предложения по этому поводу были бы мне очень полезны. Заранее спасибо.
docker
docker-container
Незнакомец
источник
источник
Ответы:
79b3fa70b51d
Кажется, что контейнер выполняет только функциюecho
.Это означает, что он запускается, выводится эхом и немедленно завершается.
Следующая
docker exec
команда не обнаружит, что она запущена, чтобы присоединиться к этому контейнеру и выполнить любую команду: слишком поздно. Контейнер уже вышел.источник
docker run -it --rm udhayakumar/busyboxwithtouch
должно быть достаточно, чтобы открыть сеанс. Точкой входа по умолчанию должна быть / bin / sh, но это зависит от вашего Dockerfile: вы могли определить другую точку входа и / или другой CMD.docker exec
присоединиться к нему ( ).По умолчанию докер-контейнер немедленно завершает работу, если у вас не запущена какая-либо задача в контейнере.
Чтобы контейнер работал в фоновом режиме, попробуйте запустить его с аргументом
--detach
(или-d
).Например:
источник
Если невозможно запустить основной процесс снова (на достаточно долгое время), есть также возможность перейти
commit
к контейнеру с новым образом и запустить новый контейнер из этого образа. Хотя это не самый обычный рабочий процесс , я считаю действительно полезным время от времени отлаживать сбойный сценарий.источник
bash
процесс в контейнере. Вероятно, у вас раньше был запущенный веб-сервер, поэтому вам нужно будет проверить, какую команду нужно использовать для восстановления сервера.Прежде всего, нам нужно запустить контейнер докеров
После этого проверяем контейнер докера:
Затем выполните следующую команду:
источник
Обычно это происходит с большинством базовых образов ОС (centos, debian и т. Д.), А также с образами узлов .
Лучше всего запустить изображение в интерактивном режиме . Пример ниже с изображением узла :
Выход
root@cacc7897a20c:/# echo $SHELL /bin/bash
источник
Вот что у меня сработало.
Получите идентификатор контейнера и перезапустите.
источник
Причина в том, что было сказано в принятом ответе. Я добавляю дополнительную информацию, которая может дать более полное представление об этой проблеме.
Created
,Running
,Stopped
,Exited
,Dead
и другие , как я знаю.docker create
, демон docker создаст контейнер со статусомCreated
.docker start
демон docker запустит существующий контейнер, статус которого может бытьCreated
илиStopped
.docker run
, демон docker завершит его в два этапа:docker create
иdocker start
.docker stop
, очевидно, демон докера остановит контейнер. Таким образом, контейнер будет вStopped
статусе.Exited
.Когда завершается процесс? Другими словами, каков процесс, как мы его начали?
Ответ находится
CMD
в файле dockerfile илиcommand
в следующем выражении, котороеbash
по умолчанию используется в некоторых изображениях, например ubutu: 18.04.источник
Это было опубликовано L0j1k в сообщении ниже и сработало для меня.
Как мне попасть в оболочку контейнера Docker?
источник
Для тех, кто пытается что-то подобное с помощью Dockerfile ...
Работа в автономном режиме не поможет. Контейнер всегда будет выходить (прекращать работу), если команда не блокирует, как в случае с bash.
В этом случае обходным путем может быть следующее: 1. Зафиксируйте полученный образ: (имя_контейнера = имя контейнера, из которого вы хотите создать образ, имя_образа = имя создаваемого образа docker commit имя_контейнера имя_образа 2. Используйте docker run для создания нового контейнера с использованием нового образа, указав команду, которую вы хотите запустить. Здесь я выполню «bash»: docker run -it image_name bash
Это даст вам интерактивный вход, который вы ищете.
источник
docker run -it <image_id> /bin/bash
Запустить в интерактивном режиме, запустив затем оболочку bash
источник
-d
флаг здесь опечатка?Вот решение, когда контейнер докеров закрывается нормально, и вы можете редактировать файл Dockerfile.
Обычно, когда контейнер докеров запущен, приложение обслуживается с помощью команды. Из справочника Dockerfile ,
Когда вы создаете образ и не указываете какую-либо команду с помощью CMD или ENTRYPOINT, будет выполнена команда CMD или ENTRYPOINT базового образа.
Например, в официальном файле Dockerfile Ubuntu есть
CMD ["/bin/bash"]
( https://hub.docker.com/_/ubuntu ). Теперьbin/bash/
команда может принимать ввод, иdocker run -it IMAGE_ID
команда присоединяет STDIN к контейнеру. В результате вы получаете интерактивный терминал, а контейнер продолжает работать.Когда в Dockerfile указана команда с CMD или ENTRYPOINT, эта команда выполняется при запуске контейнера. Теперь, если эта команда может завершиться без ввода каких-либо данных, она завершится и контейнер выйдет. НЕ
docker run -it IMAGE_ID
будет предоставлять интерактивный терминал в этом случае. Примером может служить образ докера, созданный из файла Docker ниже:Если вам нужно перейти в терминал этого образа, вам нужно будет оставить контейнер работающим, изменив команду точки входа.
После обычного запуска контейнера с помощью
docker run IMAGE_ID
вы можете просто перейти к другому терминалу и использовать егоdocker exec -it CONTAINER_ID bash
для получения терминала контейнера.источник
В моем случае я изменил определенные имена файлов и имена каталогов родительского каталога Dockerfile. Из-за чего контейнер не может найти необходимые параметры для его повторного запуска.
После переименования его обратно в исходные имена контейнер начал как масло.
источник
У меня другой взгляд на это. Я мог бы сделать
docker ps
и увидеть, что запущен докер-контейнер, я даже попытался перезапустить его, но как только я попытался получить для него сеанс, онNew-PSSession -ContainerId $containerId -RunAsAdministrator
бы вышел из строя, сказав:Моя проблема заключалась в том, что я работал с сетевой службой, и у нее не было достаточно разрешений для просмотра контейнера, хотя я дал ему разрешения на запуск команд докеров (с конфигурацией группы безопасности докеров)
Я не знал, как включить работу с контейнерами, поэтому мне пришлось вернуться к его запуску от имени администратора.
источник