【发布时间】:2020-01-12 23:49:34
【问题描述】:
我正在尝试使用 uwsgi 制作我的第一个 django 容器。它的工作原理如下:
FROM python:3.5
RUN apt-get update && \
apt-get install -y && \
pip3 install uwsgi
COPY ./projects.thux.it/requirements.txt /opt/app/requirements.txt
RUN pip3 install -r /opt/app/requirements.txt
COPY ./projects.thux.it /opt/app
COPY ./uwsgi.ini /opt/app
COPY ./entrypoint /usr/local/bin/entrypoint
ENV PYTHONPATH=/opt/app:/opt/app/apps
WORKDIR /opt/app
ENTRYPOINT ["entrypoint"]
EXPOSE 8000
#CMD ["--ini", "/opt/app/uwsgi.ini"]
entrypoint 这是一个脚本,用于检测是否调用uwsgi(如果没有参数)或python manage(在所有其他情况下)。
我想将此容器用作可执行文件(dj migrate,dj shell,... - dj 这里是 python manage.py django 交互的处理程序)和长期容器(uwsgi --ini uwsgi.尼)。我使用 docker-compose 如下:
web:
image: thux-projects:3.5
build: .
ports:
- "8001:8000"
volumes:
- ./projects.thux.it/web/settings:/opt/app/web/settings
- ./manage.py:/opt/app/manage.py
- ./uwsgi.ini:/opt/app/uwsgi.ini
- ./logs:/var/log/django
事实上,我设法正确地为项目服务,但要与 django 交互以“检查”我需要发出:
docker-compose exec web 入口点检查
在阅读文档时,我以为我只需要参数(没有 entrypoint)
docker run 的命令行参数将附加在后面 exec 形式 ENTRYPOINT 中的所有元素,并将覆盖所有元素 使用 CMD 指定的元素。这允许将参数传递给 入口点,即 docker run -d 将传递 -d 参数 到入口点。
“重复”入口点的工作情况:
$ docker-compose exec web entrypoint check
System check identified no issues (0 silenced).
如果我避免“入口点”,则失败:
$ docker-compose exec web check
OCI runtime exec failed: exec failed: container_linux.go:346: starting container process caused "exec: \"check\": executable file not found in $PATH": unknown
【问题讨论】:
-
ENTRYPOINT仅在docker run时间构建命令行时有效,在通过docker exec启动调试命令时无效。 -
好收获!谢谢。如果你把它变成一个答案,我会很高兴“接受”它..
标签: python django docker docker-compose uwsgi