无法从Docker连接PostgreSQL数据库到Python

4

我正在尝试使用Python连接Postgresql数据库。我已经使用了以下Docker Compose文件:

version: '3.1'

services:

  db:
    image: postgres
    restart: always
    environment:
      POSTGRES_PASSWORD: admin_123
      POSTGRES_USER: admin

  adminer:
    image: adminer
    restart: always
    ports:
      - 8080:8080

以下代码用于连接数据库。
conn = psycopg2.connect(
    database = "db_test",
    user ="admin",
    password = "admin_123",
    host = "db"
)

但我得到了这个错误。

运行时错误: 无法将主机名“db”翻译为地址: 没有提供节点名称或服务名称,或者不可识别

我做错了什么?


可能是docker-compose:network和link的区别的重复问题。 - awesoon
1
你的Python代码在哪里运行;在主机上还是容器中?如果在容器中,你是如何启动它的? - David Maze
抱歉,这个链接可能与此处无关。我想您是在尝试在adminer中访问db,是吗? - awesoon
我正在尝试使用Python访问数据库。 - TheTechGuy
是的,Docker正在运行的同一台机器上,我只需要将数据插入到数据库中。数据库正在Docker中运行。我有一个Jupyter笔记本,我正在尝试连接它。当我尝试连接时,我遇到了上述错误。 - TheTechGuy
显示剩余3条评论
3个回答

7

您需要像这样在Docker Compose中公开BD端口:

db:
image: postgres
restart: always
environment:
  POSTGRES_PASSWORD: admin_123
  POSTGRES_USER: admin
ports:
    - "5432:5432"

然后连接到 localhost:5432


1

另一个可能的情况是,

检查其他Docker容器是否已经使用了端口。 使用以下命令:

$ docker container ls --format "table {{.ID}}\t{{.Names}}\t{{.Ports}}" -a

0
这是我的docker-compose.yml文件 $ cat docker-compose.yml
version: '3.1' # specify docker-compose version
services:
  dockerpgdb:
    image: postgres
    ports:
      - "5432:5432"
    restart: always
    environment:
      POSTGRES_PASSWORD: Password
      POSTGRES_DB: dockerpgdb
      POSTGRES_USER: abcUser
    volumes:
      - ./data:/var/lib/postgresql%

现在在 PgAdmin4 中,您可以按照以下步骤设置新服务器以测试连接:

host: localhost
port: 5432
maintenance database: postgres
username: abcUser
password: Password

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接