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

问题描述 投票:0回答:1

试图在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 service postgresql status

收益:

9.6/main (port 5432): online

sudo lsof -nP | grep LISTEN

收益:

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

我试图运行“sudo kill -9 15817”,但是docker-compose仍然收到同样的错误。

泊坞窗,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

settings.朋友

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
    }
}
django postgresql docker
1个回答
0
投票

为了在Docker中使用postgres,您需要配置数据库用户,密码和db-name等信息。这是通过为容器设置环境变量来完成的。可以找到支持变量的完整列表here

另外,您需要将qgxswpoi文件中的postgres端口5432暴露给web服务。

这样的事情应该有效:

泊坞窗,compose.yml

docker-compose

您还必须更改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为您的服务创建默认网络,并将正在运行的容器附加到此网络。在您的Web容器内,数据库将在主机名docker-compose上提供。

settings.朋友

db

最后,如果您的python代码中没有任何类型的数据库重新连接逻辑,迁移可能仍会失败。这是因为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 } } 只等待容器启动,但postgres在容器运行后需要几秒钟才能初始化。

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

即:

depends_on

等待postgres初始化

$ docker-compose up -d db

希望这会让你起步并运行。

© www.soinside.com 2019 - 2024. All rights reserved.