簡體   English   中英

無法連接到docker容器內的postgres數據庫

[英]Cant connect to postgres database inside docker container

我的問題是我有一個腳本,該腳本應該剪貼數據並將其放到postgres數據庫中,但是要伸出postgres容器卻有問題。

當我運行docker-compose時,結果如下:

           Name                     Command               State              Ports             
------------------------------------------------------------------------------------------
orcsearch_dev-db_1   docker-entrypoint.sh postgres    Up      0.0.0.0:5432->5432/tcp       
orcsearch_flask_1    gunicorn wsgi:application  ...   Up      0.0.0.0:80->80/tcp, 8000/tcp 

我們可以清楚地看到postgres在5432端口上。

這是我的python腳本數據庫設置:(當然,出於明顯的原因我刪除了密碼)

class App():
    settings = {
        'db_host': 'db',
        'db_user': 'postgres',
        'db_pass': '',
        'db_db': 'orc',
    }
    db = None
    proxies = None

這是我的docker-compose.yml

version: '2'

services:
  flask:
    build:
      context: ./backend
      dockerfile: Dockerfile.dev
    volumes:
      - ./backend:/app
      - pip-cache:/root/.cache
    ports:
      - "80:80"
    links:
      - "dev-db:db"
    environment:
      - DATABASE_URL=postgresql://postgres@db:5432/postgres
    stdin_open: true
    command: gunicorn wsgi:application -w 1 --bind 0.0.0.0:80 --log-level debug --reload
    networks:
      app:
        aliases:
          - flask

  dev-db:
    image: postgres:9.5
    ports:
      - "5432:5432"
    networks:
      app:
        aliases:
          - dev-db

volumes:
  pip-cache:
    driver: local

networks:
  app:

當進入exec flask bash(在flask容器內部)並運行腳本命令時,出現此錯誤:

psycopg2.OperationalError: could not connect to server: No such file or directory
    Is the server running locally and accepting
    connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?

顯然,該端口上正在運行postgres,我無法弄清楚我該怎么做。 你能幫忙的話,我會很高興!

可能您使用的是DSN而不是URI,PostgreSQL認為“ db”不是主機,因為很難確定“ db”是主機還是套接字的路徑。 要修復它,如果使用> = 9.2的PostgreSQL版本,請使用URI而不是DSN。

URI的示例: postgresql://[user[:password]@][netloc][:port][/dbname][?param1=value1&...]

https://www.postgresql.org/docs/9.2/static/libpq-connect.html#LIBPQ-CONNSTRING

在您的App類中,它應該是'db_host': 'dev-db',似乎公開了該主機名,而不是db

我認為問題與您同時使用網絡和鏈接有關。 嘗試刪除鏈接,並將postgres地址更改為dev-db或將別名更改為:

networks:
  app:
    aliases:
      - dev-db
      - db

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM