python - Django应用程序服务器挂起/无法在Docker Compose中启动

标签 python django docker docker-compose

我正在尝试在Docker Compose中启动一个简单的Django应用服务器,并与Postgres容器配对。它按预期运行,启动了入口点脚本,但似乎从未真正运行Django应用服务器(这应该是最后一步,并保持运行状态)。

我知道它运行入口点脚本,因为运行了迁移步骤。应用程序服务器从不输出任何预期的输出,并且端口8000从不响应。

如果有问题,我正在使用Mac的Docker(稳定)。

我的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 $@

docker-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

您应该使用quote the positional parameters variable,以便 shell 程序保留每个参数,即使有空格也是如此。
exec "$@"

但是最好不要在docker和您的应用之间插入sh,因此请始终将exec形式用于CMD

关于python - Django应用程序服务器挂起/无法在Docker Compose中启动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38800238/

相关文章:

python - Django : is it better to import variables from a settings. py文件,还是基本配置文件?

docker - 无法从 docker 容器连接到 redis 服务器

docker - VPN可扩展性测试客户端设置的问题

angular - 通过 NGINX 在 Docker 中提供 Angular 10 应用程序

python - 关闭缓冲

python - Google Calendar API 丢弃 "conferenceData"嵌套对象

django - 没有像 django_site 这样的表

django - 使用 Django Rest Framework 实现 MVC 模式

python - 使用python正则表达式查找重复表达式

python - 返回新数据框中的第一个匹配值/列名