Django应用程序服务器挂起/不会在Docker Compose中启动
我试图在Docker Compose中启动一个简单的Django应用服务器,并与Postgres容器配对。 它像我所期望的一样,启动入口点脚本,但它似乎从来没有真正运行Django应用程序服务器(这应该是最后一步,并保持运行)。
我知道它运行入口点脚本,因为迁移步骤运行。 应用程序服务器从不输出任何预期的输出,而8000端口从不响应。
如果有问题,我正在使用Docker for Mac(stable)。
我的Django应用程序容器的Dockerfile:
FROM ubuntu:16.04 COPY my_app /my_app RUN apt-get update \ && apt-get install -y python3 python3-psycopg2 python3-pip RUN apt-get install -y nodejs npm WORKDIR /my_app RUN pip3 install -r requirements.txt RUN npm install bower RUN python3 manage.py bower install RUN python3 manage.py collectstatic --no-input EXPOSE 8000 COPY entrypoint.sh / RUN chmod 755 /entrypoint.sh CMD python3 manage.py runserver 0.0.0.0:8000 ENTRYPOINT ["/entrypoint.sh"]
Django入口点脚本:
#!/bin/sh # Allow database container to start up or recover from a crash sleep 10 cd /my_app # Run any pending migrations python3 manage.py migrate exec $@
泊坞窗,compose.yml:
version: '2' services: db: image: postgres:9.6 volumes: - ./db/pgdata:/pgdata environment: - POSTGRES_USER=my_user - POSTGRES_PASSWORD=my_password - PGDATA=/pgdata - POSTGRES_DB=my_database appserver: image: my-image command: python3 manage.py runserver 0.0.0.0:8000 ports: - '8000:8000' environment: - POSTGRES_USER=my_user - POSTGRES_PASSWORD=my_password - POSTGRES_DB=my_database links: - db depends_on: - db
在您的Dockerfile中使用CMD
的exec表单
CMD ["python3", "manage.py", "runserver", "0.0.0.0:8000"]
entrypoint.sh
脚本exec
目前正试图运行:
/bin/sh -c python3 manage.py runserver 0.0.0.0:8000
这似乎不工作,我想这只是运行python3
。
您应该引用位置参数variables,以便shell维护每个参数,即使有空格也是如此。
exec "$@"
但是最好不要在docker和你的应用程序之间有sh
,所以总是使用exec的forms来进行CMD
。