【发布时间】:2019-10-17 08:53:08
【问题描述】:
我对 Docker 很陌生。我正在尝试在 Docker 上运行 Django。以下是我的 docker-compose 文件。
version: '2'
services:
django:
build:
context: .
dockerfile: ./deploy/dev/Dockerfile
tty: true
command: python manage.py runserver 0.0.0.0:8000
ports:
- "8000:8000"
volumes:
- ./app:/src/app
depends_on:
- "workflow_db"
- "rabbitmq"
env_file:
- ./deploy/dev/envvar.env
workflow_db:
image: postgres:9.6
volumes:
- postgres_data:/var/lib/postgresql/data/
environment:
- POSTGRES_USER=hello_django
- POSTGRES_PASSWORD=hello_django
- POSTGRES_DB=hello_django
rabbitmq:
image: "rabbitmq:3-management"
hostname: "rabbitmq"
environment:
RABBITMQ_ERLANG_COOKIE: "SWQOKODSQALRPCLNMEQG"
RABBITMQ_DEFAULT_USER: "rabbitmq"
RABBITMQ_DEFAULT_PASS: "rabbitmq"
RABBITMQ_DEFAULT_VHOST: "/"
ports:
- "15672:15672"
- "5672:5672"
volumes:
postgres_data:
DockerFile
FROM python:3.7-alpine
RUN apk update && apk add --no-cache gcc libffi-dev g++ python-dev build-base linux-headers postgresql-dev postgresql postgresql-contrib pcre-dev bash alpine-sdk \
&& pip install wheel
#Copy over application files
COPY ./app /src/app
#Copy over, and grant executable permission to the startup script
COPY ./deploy/dev/entrypoint.sh /
RUN chmod +x /entrypoint.sh
WORKDIR /src/app
#Install requirements pre-startup to reduce entrypoint time
RUN pip install -r requirements.txt
ENTRYPOINT [ "/entrypoint.sh" ]
最后是我的 entrypoint.sh
#! /bin/bash
cd /src/app || exit
echo "PIP INSTALLATION" && pip install -r requirements.txt
echo "UPGRADE" && python manage.py migrate
# echo "uwsgi" && uwsgi "uwsgi.ini"
我做django-compose build,它构建了图像。但是当我做docker-compose updjango_1 exited with code 0.
但是,如果我取消注释 entrypoint.sh 的最后一行,它运行得非常好。
有人可以帮我理解背后的原因吗?
【问题讨论】:
-
如果您在 docker 映像中复制文件,最好删除卷。删除这个 `volumes: - ./app:/src/app` ,因为它会覆盖图像中的所有内容。或者可能在撰写容器内的路径将成为某些东西
/src/app/app/...。由于应用程序以代码 0 退出所以意味着没有错误,通过添加django: command: tail -f /dev/null然后验证 django 容器内的文件和文件夹来帮助您调试的一件事。路径似乎有问题 -
还有其他消息还是
django_1 exited with code 0?您能否将您的uwsgi.ini包含在问题中?