我的问题是我有一个脚本应该废弃数据并将其放在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,我无法弄清楚我该怎么做。任何帮助都会很好!
答案 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