django 操作错误:无法连接到服务器:连接被拒绝

wvyml7n5  于 2022-11-18  发布在  Go
关注(0)|答案(4)|浏览(358)

尝试在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 -9 15817”,但docker-compose up仍然收到相同的错误。

停靠-撰写.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
    }
}
egmofgnx

egmofgnx1#

为了在Docker中使用postgres,您需要配置数据库用户、密码和db-name等信息。这可以通过设置容器的环境变量来完成。支持的变量的完整列表可以在here中找到。
此外,您还需要将postgres的端口5432公开给docker-compose文件中的web服务。
应该可以这样做:

停靠-撰写.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-compose为您的服务创建一个默认网络,并将正在运行的容器连接到此网络。在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
希望这能让你开始工作。

tkclm6bt

tkclm6bt2#

我能够修复这个问题,只需构建我的数据库容器,等待几秒钟,然后构建Web容器:
docker-compose up -d --build db

  • 稍等片刻 *

docker-compose up -d --build web
我希望这对你有帮助

0lvr5msh

0lvr5msh3#

我在将PostgreSQL服务器连接到windows操作系统时也遇到了同样的问题。然后我采用了下面的方法。希望它能帮助解决这个问题...

1.下载postgres_sql
1.安装postgresql
1.搜索选项打开“SQL Shell(psql)”
1.创建数据库

1.设置添加DATABASE ....

设置.py

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'stemletics',
        'USER': 'postgres', #default user name
        'PASSWORD': 'changeme',
        'HOST': '127.0.0.1', # default host
        'PORT': '5432', # default postgres port
    }
}
t8e9dugd

t8e9dugd4#

我遇到了这个问题,结果发现我没有启动docker desktop。显然,如果docker desktop没有运行,你使用的任何docker命令都不适用于docker desktop,而是适用于你系统上的不同版本的docker。我的操作系统是ubuntu 22.04。

相关问题