Как управлять файлами из dockerfile - PullRequest
0 голосов
/ 20 февраля 2020

У меня есть проект в docker, в котором я изо всех сил пытался сгенерировать некоторые файлы из dockerfile o docker -compose файлов.

У меня есть докеризованный Django проект со следующей структурой .

assets/
app/
db/
  .gitignore (ignoring all files of the folder)
  db.sqlite3
docker-compose.yml
Dockerfile

Для целей поста я просто написал общую структуру, чтобы дать представление о том, каков проект и что я хочу сделать.

Что я пытался сделать должен был смонтировать файл базы данных как том (тип: bind), но не работал. То, что я сделал, было рассматривать папку db как папку тома. Пока все работает нормально.

Я хочу создать файл db.sqlite3, если он не существует, запустить миграцию и запустить команду python manage.py collectstati c --noinput .

Я попытался создать файл точки входа:

#/bin/sh
python manage.py collectstatic --noinput

db=/code/db/db.sqlite3
if [ ! -f  "$db" ]; then
    touch "$db"
fi

python manage.py migrate

Я попытался вызвать этот файл с помощью оператора ENTRYPOINT и CMD в Dockerfile, но ни один из них не работает. Я также попытался запустить команду touch из Dockerfile, и результат был таким же.

1 Ответ

1 голос
/ 21 февраля 2020

Если у вашего контейнера есть точка входа, то когда эта точка входа завершается, контейнер завершается, и docker ps будет показывать статус «выход». Если у него также есть команда, точка входа должна взять на себя ответственность за ее выполнение. Наиболее распространенный способ - запустить его в качестве последней строки сценария точки входа

#!/bin/sh
...
exec "$@"

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

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