簡體   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