社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Django

postgres django.db.utils.operationalerror:无法连接到服务器:连接被拒绝

Dominic M. • 6 年前 • 2221 次点击  

试图在Docker中运行我的Django服务器,但是Postgres端口已经被使用了?当我运行“docker compose up”时,我收到以下错误:

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

ERROR: Service 'web' failed to build: The command '/bin/sh -c python manage.py migrate' returned a non-zero code: 1

Sudo服务PostgreSQL状态

返回:

9.6/main (port 5432): online

sudo lsof-np grep听着

返回:

postgres  15817         postgres    3u     IPv4            1022328        0t0        TCP 127.0.0.1:5432

我试着运行“sudo kill-915817”,但docker compose up仍然收到相同的错误。

docker-compose.yml公司

version: '3'

services:
  db:
    image: postgres
  web:
    build: .
    command: python manage.py runserver 0.0.0.0:8000
    volumes:
      - .:/code
    ports:
      - "8000:8000"
    depends_on:
      - db

设置.py

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'stemletics',
        'USER': 'stemleticsadmin',
        'PASSWORD': 'changeme',
        'HOST': '127.0.0.1', # set in docker-compose.yml
        'PORT': 5432 # default postgres port
    }
}
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/38083
文章 [ 1 ]  |  最新文章 6 年前
Jack Gore
Reply   •   1 楼
Jack Gore    7 年前

为了在Docker内部使用Postgres,需要配置数据库用户、密码和数据库名称等信息。这是通过设置容器的环境变量来完成的。可以找到支持变量的完整列表 here .

此外,您还需要公开端口 5432 从波斯特格雷斯到你的 web 您的内部服务 docker-compose 文件。

这样的方法应该有效:

docker-compose.yml公司

version: '3'

services:
  db:
    image: postgres
    ports: 
      - "5432"
    environment:
      - POSTGRES_DB=stemletics
      - POSTGRES_USER=stemleticsadmin
      - POSTGRES_PASSWORD=changeme
  web:
    build: .
    command: python manage.py runserver 0.0.0.0:8000
    volumes:
      - .:/code
    ports:
      - "8000:8000"
    depends_on:
      - db

您还必须更改内部使用的主机名 settings.py . Docker撰写 为您的服务创建默认网络,并将正在运行的容器附加到此网络。在Web容器中,数据库将在主机名处可用。 db .

设置.py

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'stemletics',
        'USER': 'stemleticsadmin',
        'PASSWORD': 'changeme',
        'HOST': 'db', # set in docker-compose.yml
        'PORT': 5432 # default postgres port
    }
}

最后,如果在Python代码中没有任何类型的数据库重新连接逻辑,那么迁移可能仍然失败。这是因为 depends_on 只等待容器启动,但Postgres在容器运行后需要几秒钟进行初始化。

为了快速解决这个问题,一次运行一个容器是最简单的。

即。:

$ docker-compose up -d db

等待Postgres初始化

$ docker-compose up -d web

希望这能让你振作起来。