![](/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.