Docker Django无法连接到服务器:连接被拒绝

时间:2017-02-12 13:26:13

标签: python django docker docker-compose

我是Docker的新手,我试图使用docker-compose和docker-machine将我的Django rest API放入Nginx,Gunicorn和Postgres的容器中。遵循本教程:https://realpython.com/blog/python/django-development-with-docker-compose-and-machine/

我的大多数代码与教程(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

这是在我的Django的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?

我已经google了很多,我已经验证了postgres正在运行,在端口5432上,我可以使用psql命令连接到它。

我迷路了。我的错是什么?

编辑:它似乎没有使用我的settings.py文件或其他东西,因为它询问服务器是否在localhost上运行,而设置应该在寻找postgres。

3 个答案:

答案 0 :(得分:1)

检查您的manage.py, 应该有一行

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

如果没有这样的线,就把它放好

将您的DJANGO_SETTINGS_MODULE设置为PYTHONPATH

UPD 我克隆了你的repo并通过更改docker-compose.yml中的命令启动了web服务

-  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是正确的。

答案 1 :(得分:0)

遇到此问题的人请检查您的settings.py

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'dbname',
        'USER': 'user',
        'PASSWORD': 'password',
        'HOST': 'db'
    }
}

您的 HOST:'db'docker-compose 文件数据库名称应该相同。如果要从 db 重命名,请确保在 docker-compose 文件和 setting.py 中进行更改:

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

答案 2 :(得分:-1)

在aws ec2实例上使用docker运行django应用程序时,我正面临着同样的问题。

我注意到此错误仅在第一次构建docker映像时发生,因此要修复,我只是运行了:

CTRL + C,然后再次docker-compose up,一切正常。