2017-02-12 5 views
1

Я новичок в Docker, и я пытаюсь поместить свой API Django rest в контейнер с Nginx, Gunicorn и Postgres, используя docker-compose и docker-machine. После этого урока: https://realpython.com/blog/python/django-development-with-docker-compose-and-machine/Docker Django не удалось подключиться к серверу: Соединение отказано

Большая часть моего кода совпадает с учебником (https://github.com/realpython/dockerizing-django). с некоторыми незначительными изменениями имени.

это мой docker-compose.yml (я изменил команду gunicorn в runserver для целей отладки)

web: 
    restart: always 
    build: ./web 
    expose: 
    - "8000" 
    links: 
    - postgres:postgres 
    - redis:redis 
    volumes: 
    - /usr/src/app 
    - /usr/src/app/static 
    env_file: .env 
    environment: 
    DEBUG: 'true' 
    command: /usr/local/bin/python manage.py runserver 

nginx: 
    restart: always 
    build: ./nginx/ 
    ports: 
    - "80:80" 
    volumes: 
    - /www/static 
    volumes_from: 
    - web 
    links: 
    - web:web 

postgres: 
    restart: always 
    image: postgres:latest 
    ports: 
    - "5432:5432" 
    volumes: 
    - pgdata:/var/lib/postgresql/data/ 

redis: 
    restart: always 
    image: redis:latest 
    ports: 
    - "6379:6379" 
    volumes: 
    - redisdata:/data 

И это в моем settings.py Джанго:

DATABASES = { 
    'default': { 
     'ENGINE': 'django.db.backends.postgresql_psycopg2', 
     'NAME': 'postgres', 
     'USER': 'postgres', 
     'PASSWORD': 'postgres', 
     'HOST': 'postgres', 
     'PORT': '5432', 
    } 
} 

Nginx и Postgres (и Redis), однако мой сервер django не запускается по этой ошибке:

web_1  | django.db.utils.OperationalError: could not connect to server: Connection refused 
web_1  | Is the server running on host "localhost" (::1) and accepting 
web_1  | TCP/IP connections on port 5432? 
web_1  | could not connect to server: Connection refused 
web_1  | Is the server running on host "localhost" (127.0.0.1) and accepting 
web_1  | TCP/IP connections on port 5432? 

У меня много googled, и я проверил, что postgres запущен, на порт 5432, я могу подключиться к нему с помощью команды psql.

Я потерян. Какая у меня ошибка?

EDIT: похоже, что он не использует файл settings.py или что-то еще, так как он спрашивает, работает ли сервер на локальном хосте, в то время как настройки должны искать postgres.

ответ

0

заказ ваш manage.py, должна быть линия

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myproject.settings") 

если нет такой строки, положить его

установить DJANGO_SETTINGS_MODULE относительно PYTHONPATH.

UPD я клонировать ваш репозиторий и запустил веб-службу, изменив команду в Докер-compose.yml

- command: /usr/local/bin/gunicorn docker_django.wsgi:application -w 2 -b :8000 
+ command: python manage.py runserver 0.0.0.0:8000 

Я уверен, что DJANGO_SETTINGS_MODULE правильно.

+0

Спасибо за ответ, но линия есть! Все работает локально. –

+0

@ Ваше обновление, это правильно. И репо, о котором я говорил, работает из коробки для меня :). Мне удалось заставить его работать, но я не уверен, как именно. –

Смежные вопросы