Django app服务器挂起/不会在Docker Compose中启动

时间:2016-08-06 03:20:34

标签: python django docker docker-compose

我正在尝试在Docker Compose中启动一个简单的Django应用服务器,与Postgres容器配对。它正如我所料,启动入口点脚本,但它似乎从未实际运行Django应用服务器(这应该是最后一步,并继续运行)。

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

如果重要的话,我正在使用Docker for Mac(稳定版)。

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

1 个答案:

答案 0 :(得分:3)

在Dockerfile中使用exec表单var selected = []; $('#mydiv input:checked').each(function() { selected.push($(this).attr('name')); });

var selected = [];
$('div#checkboxes input[type=checkbox]').each(function() {
   if ($(this).is(":checked")) {
       selected.push($(this).attr('name'));
   }
});

CMD脚本CMD ["python3", "manage.py", "runserver", "0.0.0.0:8000"] 目前正在尝试运行:

entrypoint.sh

这似乎不起作用,我认为它只是在运行exec

你应该quote the positional parameters variable所以shell会维护每个参数,即使有空格。

/bin/sh -c python3 manage.py runserver 0.0.0.0:8000

但最好不要在docker和你的app之间使用python3,所以请始终使用exec表单exec "$@"