在Django应用程序中连接到本地主机上的PostgreSQL时出现问题

jdzmm42g  于 2022-10-15  发布在  Go
关注(0)|答案(1)|浏览(172)

我正在使用Docker运行我的Django应用程序,其中有多个图像:PostgreSQL、Celery_Worker、Celery_Beat和Django_app。除了celery 节拍,其他的都运行得很好。我正在使用以下命令构建docker:
docker-compose -f docker-compose.yml up -d --build
当我打开Docker Desktop时,我看到它重新启动了所有图像,一切正常工作了几秒钟,然后它退出celery 节拍,并返回celery 节拍图像,并显示以下错误:

[2022-10-13 15:34:59,440: WARNING/MainProcess] 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?

我尝试了许多我在StackOverflow和其他页面上找到的解决方案,但都没有成功。5个图像中有4个工作正常。当单击PostgreSQL图像时,我看到以下状态:

2022-10-13 13:27:04.195 UTC [1] LOG:  database system is ready to accept connections

Docker-compose.yml

version: '3.8'

services:
    db:
        image: postgres:14.0-alpine
        volumes:
            - postgres_data:/var/lib/postgresql/data/
        environment:
          - POSTGRES_USER=postgres
          - POSTGRES_PASSWORD=PF23_admin
          - POSTGRES_DB=postgres
        container_name: docerized_app_db_postgresql_dev

    app:
      build:
        context: ./backend
        dockerfile: Dockerfile
      restart: always
      command: python manage.py runserver 0.0.0.0:8000
      volumes:
        - ./backend/:/usr/src/backend/
      ports:
        - 8000:8000
      env_file:
        - ./.env
      depends_on:
        - db
      container_name: docerized_app_django_app_dev

    redis:
      image: redis:7-alpine
      ports:
        - "6379:6379" 
      container_name: docerized_app_redis_dev

    celery_worker:
      restart: always
      build:
        context: ./backend
      command: celery -A docerized_app_settings worker --loglevel=info --logfile=logs/celery.log
      volumes:
        - ./backend:/usr/src/backend
      env_file:
        - ./.env
      depends_on:
        - db
        - redis
        - app
      container_name: docerized_app_celery_worker_dev

    celery-beat:
      build: ./backend
      command: celery -A docerized_app_settings beat -l info
      volumes:
        - ./backend:/usr/src/backend
      env_file:
        - ./.env
      depends_on:
        - db
        - redis
        - app
      container_name: docerized_app_celery_beat_dev

volumes:
    postgres_data:

Docker对我来说是新的,所以我不确定如何修复它。在终端(使用Conda环境和ubuntu)运行我的应用程序时,一切正常,我的PostgreSQL连接也没有问题。
也许这是一个愚蠢的错误,我没有意识到这一点。任何帮助都将不胜感激。

jfgube3f

jfgube3f1#

因此,可能存在两个问题。
1.您的docker容器中的postgres连接字符串应该使用PG示例的容器名称(Db)作为主机名。(可能是doceralized_app_db_postgreSQL_dev。我从未显式指定容器名称,因此我不能100%确定它是否会接受该名称。)
1.默认情况下,postgres配置不监听外部连接,只监听本地主机,因此在postgres容器中,您必须将postgres.conf更改为监听‘*’,而不是本地主机。
https://www.bigbinary.com/blog/configure-postgresql-to-allow-remote-connection

相关问题