Эта команда, вероятно, должна выполняться только один раз, а не каждый раз, когда вы хотите вызвать свой стек (docker-compose up
). Если вы сделаете это, это может вызвать IntegrityError
s, а это не то, что вам нужно.
В этом случае вам, вероятно, следует выполнить эту команду вручную. После того, как контейнеры запущены и работают, вы можете выполнить команду следующим образом:
docker exec {web_container_name} python manage.py loaddata maps/fixtures/country_data.yaml
Лучше не включать эту команду в ваше тело Dockerfile
или entrypoint
как таковое.
Уведомление
Обязательно замените {web_container_name}
на правильное имя, которое вы сможете найти, введя команду docker ps
.
Но
Если вы действительно хотите это сделать, я рекомендую вам использовать директиву ENTRYPOINT
в вашем Dockerfile
. Для этого создайте новый файл с именем entrypoint.sh
и измените Dockerfile
, как показано ниже:
точка входа. sh
#!/bin/bash
set -e
python manage.py loaddata maps/fixtures/country_data.yaml
exec "$@"
Dockerfile
FROM python:3.7-slim
RUN apt-get update && apt-get install
RUN apt-get install -y libmariadb-dev-compat libmariadb-dev
RUN apt-get update \
&& apt-get install -y --no-install-recommends gcc \
&& rm -rf /var/lib/apt/lists/*
RUN python -m pip install --upgrade pip
RUN mkdir -p /app/
WORKDIR /app/
COPY requirements.txt requirements.txt
RUN python -m pip install -r requirements.txt
COPY entrypoint.sh /app/
COPY . /app/
RUN chmod +x entrypoint.sh
ENTRYPOINT ["/app/entrypoint.sh"]