Docker Community Forums

Share and learn in the Docker community.

Nginx not recognizing "app" service when using entrypoint


(Meleiyu) #1

So I’m using docker, postgres, django, and nginx.

It works fine but when I try to create an entrypoint script or even just an entrypoint so that I can run migrate but runserver it doesn’t work.

When I just have CMD runserver in my Dockerfile it’s fine. But if I set the ENTRYPOINT to ./docker-entrypoint.sh (which only runs migrate and runserver) I start to see nginx throw an error.

The error is:

app_1    | standard_init_linux.go:190: exec user process caused "no such file or directory"
nginx_1  | 2018/09/16 18:58:02 [emerg] 1#1: host not found in upstream "app:8001" in /etc/nginx/conf.d/default.conf:2
nginx_1  | nginx: [emerg] host not found in upstream "app:8001" in /etc/nginx/conf.d/default.conf:2

My Dockerfile:

FROM python:3.6

ARG requirements=requirements/local.txt
ENV DJANGO_SETTINGS_MODULE=sasite.settings.local

WORKDIR /app

COPY manage.py /app/
COPY requirements/ /app/requirements/ 

RUN pip install -r $requirements

COPY sasite sasite
COPY templates templates
COPY logs logs
COPY scripts scripts

EXPOSE 8001

CMD ["python", "manage.py", "runserver", "0.0.0.0:8001"]

My compose:

version: "3.2"
services:
  app:
    build:
      context: .
      dockerfile: Dockerfile
      args:
        requirements: requirements/local.txt
    environment:
      - DJANGO_SETTINGS_MODULE=sasite.settings.local
      - PYTHONDONTWRITEBYTECODE=1
    volumes:
      - ./:/app
    networks:
      - main
    depends_on:
      - db
  db:
    image: postgres:10.1-alpine
    environment:
      POSTGRES_DB: sasite_db
      POSTGRES_USER: pguser
      POSTGRES_PASSWORD: pguser123
    ports:
      - "5432:5432"
    networks:
      - main
  nginx:
    image: nginx
    volumes:
      - ./config/nginx.conf:/etc/nginx/conf.d/default.conf:ro
      - ./static:/usr/share/nginx/sasite/static
    ports:
      - "80:80"
    networks:
      - main
    depends_on:
      - app

networks:
  main:

And my entrypoint script:

#!/bin/bash
echo "Applying database migrations"
python manage.py migrate

# Start server
echo "Starting server"
python manage.py runserver 0.0.0.0:8000

Also my nginx.conf:

upstream django_server {
    server app:8001 fail_timeout=0;
}

server {
    listen 80;
    client_max_body_size 4G;
    server_name localhost;
    charset utf-8;
    keepalive_timeout 5;
    location /static/ {
        root /usr/share/nginx/sasite/;
        expires 30d;
    }
    location / {
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_redirect off;
        if (!-f $request_filename) {
            proxy_pass http://django_server;
            break;
        }
    }
}

Any help would be appreciated. When I move to production I need to be able to have it run migrations before running the server when I deploy so having it not work is a big inconvenience.

Thanks