Как запустить образ docker на локальном сервере
Я новичок в Docker и мне нужно запустить докеризованный проект django, который уже написан другим разработчиком, это Dockerfile.dev:
FROM python:alpine
RUN apk update \
&& apk add --virtual build-deps gcc python3-dev musl-dev \
&& apk add postgresql-dev \
&& apk add jpeg-dev zlib-dev libjpeg
ENV PYTHONUNBUFFERED 1
WORKDIR /app
COPY requirements.txt /tmp/
RUN pip install --requirement /tmp/requirements.txt
COPY entrypoint.sh /app/
ENTRYPOINT [ "./entrypoint.sh" ]
EXPOSE 8000
CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]
и dcoker-compose.yml :
services:
event:
build:
context: .
dockerfile: Dockerfile.dev
volumes:
- ./:/app
env_file:
- ./envs/development.env
command:
bash -c "python manage.py makemigrations && python manage.py migrate && python manage.py runserver 0.0.0.0:8000"
ports:
- "8000:8000"
depends_on:
- event-database
event-database:
image: postgres:alpine
env_file:
- ./envs/development.db.env
networks:
default:
name: mizban
когда я создаю образ с помощью docker build --tag и затем запускаю его с помощью docker run imageid, он не запускает часть CMD для запуска проекта на порту 0.0.0.0:8000, какие-нибудь предложения?
Файл entrypoint
всегда имеет приоритет над command
. Ваш файл Dockerfile.dev
содержит и ENTRYPOINT
, и CMD
. В этом случае CMD
используется в качестве аргумента ENTRYPOINT
.
Поэтому если вы хотите запускать только command
, но не entrypoint
, вам нужно переопределить секцию entrypoint
пустой строкой в вашем файле docker-compose.yml.
Обратитесь к следующему примеру.
services:
event:
build:
context: .
dockerfile: Dockerfile.dev
volumes:
- ./:/app
env_file:
- ./envs/development.env
entrypoint: ""
command:
bash -c "python manage.py makemigrations && python manage.py migrate && python manage.py runserver 0.0.0.0:8000"
ports: ...