Как запустить CMD и открыть Bash при запуске док-контейнера?

Я с трудом пытаюсь понять это.

Итак, у меня есть файл докеров на основе образа Ubuntu. В конце моего файла докеров у меня есть:

CMD django-admin startproject $PROJECTNAME

В предыдущем посте мне сказали, что в базовом образе Ubuntu есть CMD для запуска /bin/bash, поэтому моя команда фактически перезаписывает его (не уверен, актуально это или нет).

Проблема, с которой я сталкиваюсь, заключается в том, что я запускаю:

docker run -i -t <containerid> 

Ничего не происходит... docker ps показывает, что контейнеры не запущены

Но если я бегу:

docker run -i -t <containerid> /bin/bash

Контейнер запускается, я в шелле, а docker ps показывает, что этот контейнер запущен. Все работает, как и ожидалось, но моего проекта django там нет, и я понимаю, что запуск /bin/bash переопределяет CMD в файле докеров, что означает, что django-admin startproject никогда не запускается.

Изнутри контейнера я могу запустить django-admin startproject $projectname, и он создаст проект без проблем, что говорит мне, что django и все его зависимости установлены, и мои переменные среды регистрируются.

Тем не менее, я все еще подозреваю, что в моем файле докеров может быть проблема с моим CMD, и я не знаю, что делать дальше.

С моим предоставленным файлом dockerfile, если я не запущу контейнер с /bin/bash, контейнер не запустится.

Вывод образов докеров:

REPOSITORY          TAG                 IMAGE ID            CREATED              SIZE
<none>              <none>              cbec557d6362        About a minute ago   579 MB
<none>              <none>              6919c19b159a        16 hours ago 

запуск докера:

docker run -i -t cbec557d6362

person david    schedule 07.11.2016    source источник
comment
Два связанных вопроса: вы создали образ, используя свой Dockerfile? Вы понимаете разницу между образом и контейнером?   -  person R0MANARMY    schedule 07.11.2016
comment
Да на оба вопроса.   -  person david    schedule 07.11.2016
comment
Не могли бы вы включить вывод docker images и точную команду docker run? Просто хочу подтвердить, что вы запускаете правильный образ.   -  person R0MANARMY    schedule 07.11.2016
comment
Хорошо, я включил это.   -  person david    schedule 07.11.2016
comment
Вы можете присоединиться к этой комнате? Это может быть быстрее, чем комментарии   -  person R0MANARMY    schedule 07.11.2016


Ответы (1)


Я прокомментировал исходную проблему, но по какой-то причине теперь есть новая. Когда вы запускаете /bin/bash, это становится командой, выполняемой в этом контейнере, оболочке bash. Вы можете делать в контейнере все, что хотите (например, создать проект Django), но когда вы выходите из этой оболочки, контейнер все равно останавливается (поскольку контейнеры останавливаются, когда завершается процесс PID 1, в данном случае /bin/bash).

Мое подозрение (я не очень хорошо знаю Django) заключается в том, что команда django-admin startproject $PROJECTNAME выполняется, успешно завершается, а затем завершается. Это PID 1, поэтому контейнер останавливается. Вот почему docker ps ничего не показывает.

Мое предложение состояло бы в том, чтобы вместо этого использовать RUN django-admin startproject $PROJECTNAME в вашем Dockerfile, а затем CMD /bin/bash.

Создайте контейнер, затем запустите его, и вы должны быть в оболочке bash, проверьте, создан ли ваш проект.

person johnharris85    schedule 07.11.2016