繁体   English   中英

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

[英]Docker Django could not connect to server: Connection refused

我是 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?

我在谷歌上搜索了很多,我已经确认 postgres 正在运行,在端口 5432 上,我可以使用 psql 命令连接到它。

我搞不清楚了。 我的错误是什么?

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

当那些有这个问题的人请检查你的settings.py

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

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

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

查看你的manage.py,应该有一行

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

如果没有这样的线,把它

相对于PYTHONPATH设置您的DJANGO_SETTINGS_MODULE

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

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

我注意到这个错误只在第一次构建 docker 镜像时发生,所以为了修复我刚刚运行:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM