繁体   English   中英

发生异常:OperationalError 无法将主机名“db”转换为地址:未知主机

[英]Exception has occurred: OperationalError could not translate host name “db” to address: Unknown host

我在本地运行这个脚本。 在 postgres 连接上,我面临“发生异常:OperationalError 无法将主机名“db”转换为地址:未知主机”。 数据库已启动,我开始使用它

docker run --publish 8000:8000 --detach --name db REMOTEURL:latest

当我使用 docker-compose 执行相同操作并执行 django 应用程序并将其作为管理命令运行时,它可以工作。 编码:

conn_string = "host='db' dbname='taras' user='postgres' password='postgres'"
with psycopg2.connect(conn_string) as connection:
    with connection.cursor() as cursor:
    ... my stuff

我不知道为什么从我计算机上的本地脚本访问 docker 容器时,docker 名称(url)永远无法识别。 也尝试了“localhost”而不是“db”。 在 docker 容器内运行 python 脚本时,识别其他 docker 容器(在我的情况下为 db)没有问题。 我错过了什么?

编辑:澄清一下,我只在 docker 中运行数据库。 Python 脚本在本地启动,在我的 windows 命令行中使用

python myscript.py

Docker-compose 文件:

version: "2"
services:
  db:
    image: REMOTEURL:latest
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: postgres
      POSTGRES_HOST_AUTH_METHOD: trust

这可能是因为当您启动容器时,它们可以根据您在内部提供的名称解析主机名,但是如果您想从外部访问容器(我假设您想访问您的 postgres 数据库),您还需要打开通过将-p 5432:5432添加到您的 postgres 容器来为 postgres 容器提供端口。 如果您想从同一网络上的另一个容器访问 postgres,请使用db:5432连接,并从外部使用localhost:5432

编辑:试试这个作为你的docker-compose.yml

version: "2"
services:
  db:
    image: REMOTEURL:latest
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: postgres
      POSTGRES_HOST_AUTH_METHOD: trust
    ports:
      - 5432:5432

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM