![](/img/trans.png)
[英]Can`t connect to postgres in docker container outside of Python shell
[英]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.