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