![](/img/trans.png)
[英]Django Docker: django.db.utils.OperationalError: could not translate host name “db” to address: Name or service not known
[英]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.