Docker: Поддерживать работу контейнера Ubuntu после запуска? - PullRequest
1 голос
/ 05 апреля 2020

Я пытаюсь запустить docker container, используя ubuntu изображение:

docker container run -d --name ubuntu_assignment_4 6e4f1fe62

Однако, как только я запускаю контейнер, он снова останавливается.

Почему это происходит и как я могу убедиться, что контейнер продолжает работать?

Образ, который я пытаюсь запустить здесь: ubuntu:14.04

Ответы [ 2 ]

1 голос
/ 05 апреля 2020

Если вы собираетесь использовать изображение ubuntu:14.04 без каких-либо изменений, вам не потребуется отдельный Dockerfile. И невозможно сохранить простое ubuntu:14.04 изображение в качестве контейнера.

Вы можете напрямую запустить контейнер с интерактивной оболочкой, используя изображение ubuntu:14.04.

docker run -it ubuntu:14.04 /bin/bash

Но на обычном образе ubuntu:14.04 предварительно не установлено curl .

Для этого вам понадобится пользовательский Dockerfile.

0 голосов
/ 05 апреля 2020

Я не могу точно сказать, что происходит, не видя полного файла Dockerfile, который использовался для создания образа, но я вполне уверен, что проблема, с которой вы столкнулись, заключается в том, что любая задача, запускаемая внутри контейнера, завершается и выход. Контейнеры

Docker работают с назначением некоторой команды (с использованием директив ENTRYPOINT или CMD в Dockerfile или в качестве аргумента docker start или docker run в командной строке), которая является программа, которая запускается при загрузке контейнера. Контейнер будет жить до тех пор, пока эта задача продолжает выполняться, и как только эта программа завершит работу, контейнер прекратит работу.

Чтобы указать точку входа при запуске в командной строке, попробуйте:

docker create -it [image] /bin/bash

Затем запустите ее так:

 docker start -ia [Container ID]

Контейнер выйдет после выхода из оболочки потому что это назначает оболочку в качестве точки входа.

cURL может быть не установлен по умолчанию. Его можно установить с помощью apt-get. Но опять же, как только оболочка будет закрыта, контейнер остановится и все изменения будут потеряны. Для начала попробуйте создать новый каталог где-нибудь, а затем добавьте файл с именем Dockerfile с таким содержимым:

FROM ubuntu:latest
RUN  apt-get update && apt-get install -y curl
ENTRYPOINT ["/bin/bash"]

, который создаст новый образ с установленным curl. затем из нового каталога, в котором был создан Dockerfile, используйте:

docker build .
docker images

, который создаст новый образ, используя Dockerfile в качестве чертежа. Когда сборка завершится, найдите идентификатор изображения для нового контейнера и запустите его, используя:

docker run -it [image id]

В конечном счете, чтобы сделать Docker действительно полезным, типичным подходом является замена этой последней строки в Dockerfile. (ENTRYPOINT ["command"]) с чем-то, что будет работать вечно (например, ENTRYPOINT ["apache2"] или ENTRYPOINT ["redis"] или подобное). Если у вас есть опыт использования обычных настольных / серверных ОС и полнофункциональных виртуальных машин, таких как VMWare или VirtualBox, просто помните, что Docker сильно отличается; способ его работы и шаблоны, используемые для его развертывания, не совпадают.

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