2016-10-14 4 views
1

У меня есть простые команды для создания и запуска контейнера (create.sh):Не удается запустить простой докер контейнер с помощью команды «старт Докер» из созданного образа

docker build -t foo . 

docker rm bar 
docker create --name=bar foo && \ 
docker start bar && \ 
docker exec bar sh /bin/echo Test!!! 

Dockerfile:

#/bin/bash 
FROM centos:7 
RUN yum update -y 

Но это не может быть запущена:

$ bash create.sh 
Sending build context to Docker daemon 4.608 kB 
Step 1 : FROM centos:7 
---> 980e0e4c79ec 
Step 2 : RUN yum update -y 
---> Using cache 
---> 80b94205920c 
Successfully built 80b94205920c 
bar 
a1db507225ca7479bdcc3bb3d4e3a86339827f4bf0e9365f507978b11d99df19 
bar 
Error response from daemon: Container bar is not running 

Контейнер был создан, но он еще не начался.

ответ

2

The Dockerfile for CentOS определяет оболочку как CMD для запуска при запуске контейнера:

CMD ["/bin/bash"] 

Docker контейнеры выхода, когда процесс они начали с отделкой, так что происходит когда вы используете start свой контейнер, он запускается bash, а затем заканчивается, потому что больше нет ввода в оболочку.

Использования Docker изображения, это делает то, что вы ожидаете - команда echo отменяет bash команду в Dockerfile:

> docker run temp echo 'Test' 
Test 

Если вы хотите сохранить контейнер работает в фоновом режиме, то вам нужен процесс внутри контейнера продолжать работать. Вы можете указать команду при создании контейнера:

>docker create temp sleep infinity 
a34a4528b3cfbb7a36fb429d32510c5576831adeb899c07e4596a6b9731c945b 
> docker start a34 
a34 
> docker exec a34 echo 'Test' 
Test 
4

В вашем файле Dockerfile нет ENTRYPOINT или CMD, поэтому он заканчивается немедленно, это нормально.

Проверьте документы о Entrypoint

+0

выписки из дока https://docs.docker.com/engine/reference/builder/#/cmd 'Основной целью ЦМДА является предоставление defaults для исполняемого контейнера. ' – user2915097

+0

from https://docs.docker.com/engine/reference/builder/#/entrypoint' ENTRYPOINT позволяет вам сконфигурировать контейнер, который будет запускаться как исполняемый файл. Например, начнется nginx с его содержимым по умолчанию, прослушивая порт 80: docker run -i -t -rm -p 80:80 nginx' – user2915097

+0

Хм, это все еще не ясно. Вы имеете в виду, что этот контейнер немедленно останавливается, потому что в фоновом режиме есть задачи? Как и nginx, apache и т. Д. – Kirby

Смежные вопросы