Контейнер Ubuntu немедленно завершается после `docker run ubuntu`

#docker #ubuntu #windows-10 #containers #windows-subsystem-for-linux

#docker #ubuntu #windows-10 #контейнеры #windows-subsystem-for-linux

Вопрос:

Я нахожусь в Windows 10, и у меня включен WSL2. Когда я делаю это, docker pull ubuntu за docker run ubuntu которым следует, на моей панели мониторинга появляется новый контейнер Ubuntu со случайно сгенерированным именем, и он запускается на полсекунды, но затем сразу останавливается. Если я нажимаю кнопку «Пуск», наблюдается то же поведение. Я попытался запустить эти команды из командной строки, PowerShell и моего загруженного дистрибутива Ubuntu 18.04 (который также является моим дистрибутивом WSL2 по умолчанию) с тем же результатом.

Как мне это исправить?

Кроме того, docker logs <container_name> ни к чему не приводит, и двойной щелчок по имени контейнера на панели мониторинга не показывает никаких журналов.

Комментарии:

1. Вы не указали команду для запуска. Поставьте bash в конце. Затем вам также нужно добавить -it флаг. Итак docker run -it ubuntu bash . По крайней мере, это.

2. Фактически, контейнер Ubuntu запускается bash по умолчанию, но если stdin закрыт (нет -i ), он немедленно завершается. Без -t вы не увидите подсказок и многие другие вещи не будут работать. Так docker run -it ubuntu вы получите оболочку bash.

Ответ №1:

Контейнер docker завершает работу, когда его основной процесс завершает свое выполнение. Теперь, когда вы проверяете Dockerfile образа Ubuntu, вы можете увидеть

CMD [«/bin / bash»], который запускается при запуске контейнера.

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

 docker run -id --name=myubuntu ubuntu 
  

Или вы можете напрямую запустить контейнер с помощью интерактивной оболочки, используя

 docker run -it --name=myubuntu ubuntu /bin/bash
  

Ответ №2:

 $ docker run -d ubuntu bash -c "tail -f /dev/null"
8181cb08da63e8c2b43696155088f1a7da58023d426f11dbc52ec4867a2f5bdf
  

Использование зависшей команды (например tail -f /dev/null ) гарантирует, что контейнер не закроется раньше.

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

 $ docker exec -it 8181cb08da63e8c2b43696155088f1a7da58023d426f11dbc52ec4867a2f5bdf /bin/bash
  

Чтобы упростить задачу, вы могли бы назвать контейнер с помощью --name флага

 $ docker run -d --name=myubuntu ubuntu bash -c "tail -f /dev/null"
fd534285934a6d62e6955ee330134e342d97a6900f4531f5ee60f729d4c6d43d
  

Затем войдите в контейнер, используя

 $ docker exec -it myubuntu /bin/bash
  

Комментарии:

1. используя /bin/bash вместо bash , вы убедитесь, что клавиши со стрелками работают при прокрутке команд