PostgreSQL не может подключиться к приложению fastapi через SQLalchemy с использованием docker-compose - PullRequest
0 голосов
/ 04 ноября 2019
test-api_1  | sqlalchemy.exc.OperationalError: (psycopg2.OperationalError) could not connect to server: Connection refused
test-api_1  |   Is the server running on host "0.0.0.0" and accepting
test-api_1  |   TCP/IP connections on port 5432?
test-api_1  | 
test-api_1  | (Background on this error at: http://sqlalche.me/e/e3q8)
partnerup-api_test-api_1 exited with code 1

Это ошибка, которую я получаю - она ​​относительно расплывчата и не дает намного больше информации.

Из docker-compose cli я получаю следующее:

my_postgres | 2019-11-03 23:05:21.746 UTC [1] LOG:  listening on IPv4 address "0.0.0.0", port 5432
my_postgres | 2019-11-03 23:05:21.746 UTC [1] LOG:  listening on IPv6 address "::", port 5432
my_postgres | 2019-11-03 23:05:21.758 UTC [1] LOG:  listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
my_postgres | 2019-11-03 23:05:21.817 UTC [51] LOG:  database system was shut down at 2019-11-03 23:05:21 UTC
my_postgres | 2019-11-03 23:05:21.847 UTC [1] LOG:  database system is ready to accept connections

Это сбивает с толку, потому что кажется, что слушает, но базовое приложение API не распознает с помощью sql alchemy.

Я пытался перейти к postgres.conf, но обнаружил, что listen_adress = '*'

Помимо этого, я не знаю, в чем может быть проблема.

database.py

from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker


SQLALCHEMY_TRACK_MODIFICATIONS = False
## from sql alchemy docs --- format: postgresql://<user>:<password>@<host>:<port>/<database>
SQLALCHEMY_DATABASE_URI = 'postgresql://postgres:dbpw@0.0.0.0:5432/partnerup'
engine = create_engine(SQLALCHEMY_DATABASE_URI)
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)

Base = declarative_base()

docker-compose.yml

version: '3' #docker-compose version
services:       #containers in the network
  test-api:
    build: .
    ports:
      - 5000:5000 #port to go to to get a local version of the app
    volumes:
      - ./apps/api/app:/app
    working_dir: /app
    depends_on: 
      - db
    command:
      ['uvicorn', 'main:app', '--host', '127.0.0.1', '--port', '5000']
      #may integrate later
  db:
    image: "postgres:11"
    container_name: "my_postgres"
    restart: always 
    ports:
      - "5432:5432"
    environment:
      POSTGRES_USER: 'postgres'
      POSTGRES_PASSWORD: 'dbpw'
      POSTGRES_DATABASE: 'partnerup'
      POSTGRES_HOST: 'localhost'
      POSTGRES_PORT: '5432'
    volumes:
          # this command will create database as described in init file 
     # - .:/docker-entrypoint-initdb.d/       
      - db_volume:/var/lib/postgresql
volumes:
  db_volume: {}

Я ожидаю, что смогу проверить соединение, но продолжаю получать эту досадную ошибкусообщение.

...