Docker Compose,Postgres和Python连接被拒绝

fafcakar  于 2023-10-16  发布在  Docker
关注(0)|答案(1)|浏览(124)

我有一个连接到postgresql并写入数据的python代码。然而,当我将其容器化时,python代码无法连接到postgresql。下面是代码:

import pandas as pd
from sqlalchemy import create_engine
import sqlalchemy

username = 'user1'
password = '12345'
host_name = 'pgdatabase'
port = '5433'
database_name = 'traindb'

engine = create_engine(f'postgresql://{username}:{password}@{host_name}:{port}/{database_name}')
df=pd.read_csv("iris.csv")
df.to_sql(name='cleandata', con=engine, index=False, if_exists='replace')

YAML代码如下:

version: '3'
services:
  pgdatabase:
    container_name: pgdatabase
    image: postgres:12-bullseye
    environment:
      - POSTGRES_USER=user1
      - POSTGRES_PASSWORD=12345
      - POSTGRES_DB=traindb
    networks:
      - postgres_network
    volumes:
      - "./pg_data:/var/lib/postgresql/data:rw"
    ports:
      - "5433:5432"
  cleandata:
    build: "."
    networks:
      - postgres_network
    depends_on:
      - pgdatabase
networks:
  postgres_network:
    external: false

请帮我解决我的问题。
收到的错误为“psycopg2.OperationalError:无法连接到服务器:连接被拒绝”。

5uzkadbs

5uzkadbs1#

您正在使用服务名称作为数据库的hostname,但数据库在内部侦听端口5432。因此,您必须使用pgdatabase:5432localhost:5433(因为您已经将端口5432从容器转发到主机上的5433)。
如果使用服务名称,则必须使用容器所暴露的“实际”端口。如果转发该端口,则可以将localhost沿着使用。希望你能理解。

相关问题