#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
, вы убедитесь, что клавиши со стрелками работают при прокрутке команд