Невозможно запустить docker образ с помощью команды docker run - PullRequest
1 голос
/ 15 марта 2020

Я хочу создать контейнер python Django. У меня есть Dockerfile, как показано ниже -

    FROM python:3.7-slim
    ENV PYTHONUNBUFFERED 1
    RUN apt-get update
    RUN apt-get install python3-dev default-libmysqlclient-dev gcc  -y
    COPY ./requirements.txt /requirements.txt
    RUN pip install -r /requirements.txt
    RUN mkdir /eitan_app
    WORKDIR /eitan_app
    COPY . /eitan_app
    EXPOSE 8000
    RUN python3 manage.py makemigrations
    RUN python3 manage.py migrate

CMD ["python3", "manage.py", "runserver", "0.0.0.0:8000"]

Я создал образ с помощью команды, упомянутой ниже -

docker build -t gcr.io/eitan-269907/eitan-app:v1 .

docker images

Приведенная выше команда успешно создала образ. Теперь я хочу создать работающий контейнер образа, поэтому запустите команду -

docker run --rm -p 8000:8000 gcr.io/eitan-269907/eitan-app:v1

Вышеприведенная команда завершилась без кода ошибки. Поэтому я запускаю команду docker ps -a, чтобы проверить состояние контейнера.

enter image description here

Контейнер не запущен. Поэтому я попытался проверить журналы с помощью команды docker logs -f <container id>, но команда ничего не возвращала.

Я не понимаю, что не так с моей конфигурацией. Я пытался найти решение и ничего не нашел.

Ответы [ 2 ]

2 голосов
/ 15 марта 2020

Это может быть связано с какой-то ошибкой при запуске makemigration или с каким-либо другим сценарием. В таком случае я пытаюсь использовать Entrypoint как '/ dev / null', чтобы контейнер не выходил,

Это дает возможность войти в контейнер и выполнить их вручную, чтобы проверить, в чем заключается основная проблема

Для вашего случая было бы предложено

FROM python:3.7-slim
ENV PYTHONUNBUFFERED 1
RUN apt-get update
RUN apt-get install python3-dev default-libmysqlclient-dev gcc  -y
COPY ./requirements.txt /requirements.txt
RUN pip install -r /requirements.txt
RUN mkdir /eitan_app
WORKDIR /eitan_app
COPY . /eitan_app
ENTRYPOINT ["tail", "-f", "/dev/null"]

Как только вы создадите этот образ и выполните его, он продолжит работу контейнера

затем вы можете использовать docker exec -it <container_name> bash, что позволит вам войти в контейнер и выполнить оставшиеся команды и посмотреть, дает ли оно какую-то ошибку

1 голос
/ 15 марта 2020

Когда вы запускаете его с флагом --rm, он удаляет контейнер после завершения команды или задания, которое он должен выполнить. Это объясняет, почему вы ничего не видите при попытке просмотреть журналы или с помощью ps -a. Попробуйте запустить контейнер с -d (detach) вместо --rm и посмотрите, продолжает ли работать контейнер.

...