Запустите оболочку ubuntu 16.04 bash в образе докера - PullRequest
0 голосов
/ 18 сентября 2019

У меня есть этот Dockerfile:

FROM ubuntu:16.04

Я запускаю

docker build -t mine .

Он строит.Затем я запускаю

docker exec -it mine /bin/bash

и там написано

Error: No such container: mine

Я уверен, что упускаю что-то простое, но я прогуглил имя образа докера, я запустил docker images и показывает «CONTAINER ID» «мой» (с тегом «последний»), я посмотрел на stackoverflow.Это так просто, что трудно найти ответ.

Я использую Docker 19.03.2, сборка 6a30dfc, на OS X.

РЕДАКТИРОВАТЬ : Если я запускаюdocker run mine он запускается и сразу же завершает работу (разумеется, так говорит Dockerfile).Тогда есть контейнер (не работает).Затем, если я исполняю этот контейнер по идентификатору, он говорит: «Контейнер .. хекс .. не работает», что имеет смысл.

Я думаю, я хочу самый простой способ запустить оболочку bash в Ubuntu 16.04.

Советы?

Ответы [ 3 ]

6 голосов
/ 18 сентября 2019
Команда

Docker exec предназначена для выполнения команды внутри запущенного контейнера.Вам просто нужно run ваш контейнер, используя docker run -it mine /bin/bash.

Если ваша конечная цель - запустить bash для Ubuntu, вы можете пропустить фазу build и просто выполнить docker run -it ubuntu:16.04 /bin/bash.

Обратите внимание на флаги -i и -t.Первый указывает, что ваша контейнерная программа (например, bash) может получить некоторый пользовательский ввод.Следовательно, Docker будет держать свой стандартный STDIN открытым.Второй флаг заключается в использовании псевдотерминала Linux (PTY) в качестве управляющего терминала команды (например, bash).И комбинация этих флагов позволяет вам иметь нормальный опыт интерактивной оболочки.

2 голосов
/ 18 сентября 2019

Причина этой команды docker run mine заключается в том, что она будет запускать контейнер, но будет прервана, поскольку не будет выделять псевдо-tty

-t              : Allocate a pseudo-tty
-i              : Keep STDIN open even if not attached

Для интерактивных процессов (например, оболочки).), вы должны использовать -i -t вместе, чтобы выделить tty для процесса контейнера.-i -t часто пишется -t, как вы увидите в следующих примерах.Указание -t запрещено, когда клиент получает свой стандартный ввод из канала, например:

echo test | docker run -i busybox cat

, поэтому в вашем случае вы должны выделить псевдо-tty для контейнера ubuntu.

docker run --name my_ubuntu_container -it ubuntu bash

Тогда вы можете запустить

--tty , -t      Allocate a pseudo-TTY
docker exec -it my_ubuntu_container bash

1 голос
/ 18 сентября 2019

это потому, что вам нужно сначала запустить его перед использованием exec

docker run -it mine bash
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...