无法连接到docker容器内的postgres数据库

我的问题是我有一个脚本,应该废弃数据,并把它放在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: 

当进入执行烧瓶bash(里面瓶容器)和运行脚本命令我得到这个错误:

 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”是主机还是套接字path。 要修复它,如果使用> = 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

我认为这个问题与你使用networking和链接在一起的事实有关。 尝试删除链接,并将postgres地址更改为dev-db或将别名更改为:

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