我想创建一个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 run --rm -p 8000:8000 gcr.io/eitan-269907/eitan-app:v1
以上命令已退出,没有任何错误代码。因此,我运行命令docker ps -a
来检查容器的状态。
容器未运行。因此,我尝试使用命令docker logs -f <container id>
检查日志,但命令未返回任何内容。
我不了解我的配置出了什么问题。我一直在寻找解决方案,却一无所获。
答案 0 :(得分:2)
这可能是由于运行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 :(得分:1)
使用--rm
标志运行它时,它会在应该执行的命令或作业完成后删除该容器。这解释了为什么在尝试查看日志或使用ps -a
时看不到任何内容的原因。尝试使用-d
(分离)而不是--rm
运行容器,然后查看容器是否仍在运行。