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

时间:2017-11-22 10:47:02

标签: python-3.x postgresql docker asynchronous docker-compose

我的问题是我有一个脚本应该废弃数据并将其放在postgres数据库中,但是有一个问题需要触及postgres容器。

当我运行docker-compose时,结果是:

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:

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

这是我的python脚本数据库设置:(因为显而易见的原因我删除了密码)

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"?

这是我的docker-compose.yml

{{1}}

当进入exec flask bash(在flask容器内)并运行脚本命令时,我收到此错误:

{{1}}

显然这个端口上运行了postgres,我无法弄清楚我该怎么做。任何帮助都会很好!

3 个答案:

答案 0 :(得分:2)

可能你使用的是DSN而不是URI,而PostgreSQL认为“db”不是主机,因为很难判断“db”是主机还是路由器的路径。要修复它,如果使用> = 9.2版本的PostgreSQL,则使用URI而不是DSN。

URI示例: TrustFrameworkExtensions.xml

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

答案 1 :(得分:0)

在你的App类中它应该是'db_host': 'dev-db',似乎主机名是公开的,而不是db

答案 2 :(得分:0)

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

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