[英]How do I access a postgresql DB that was setup with docker-compose?
I use the following docker-compose.yml file:我使用以下 docker-compose.yml 文件:
version: '3.8'
services:
db:
image: postgres:13-alpine
volumes:
- postgres_data:/var/lib/postgresql/data/
expose:
- 5432
environment:
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=postgres
- POSTGRES_DB=testdb
volumes:
postgres_data:
I bring it up with docker-compose up -d --build
.我提出了docker-compose up -d --build
。 Now when I try to access it from Python, say, with psycopg2 the following errors show up现在,当我尝试使用 psycopg2 从 Python 访问它时,会出现以下错误
>>> conn = psycopg2.connect(host="localhost", database="testdb", user="postgres", password="postgres")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python3.9/site-packages/psycopg2/__init__.py", line 122, in connect
conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
psycopg2.OperationalError: connection to server at "localhost" (::1), port 5432 failed: Connection refused
Is the server running on that host and accepting TCP/IP connections?
connection to server at "localhost" (127.0.0.1), port 5432 failed: Connection refused
Is the server running on that host and accepting TCP/IP connections?
>>> conn = psycopg2.connect(host="db", database="testdb", user="postgres", password="postgres")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python3.9/site-packages/psycopg2/__init__.py", line 122, in connect
conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
psycopg2.OperationalError: could not translate host name "db" to address: nodename nor servname provided, or not known
Could you help me to resolve that?你能帮我解决这个问题吗?
The problem is that expose
does not publish the ports to the host machine.问题是expose
不会将端口发布到主机。 They are only accessible to linked services.它们只能被链接的服务访问。
You have to manually publish the ports:您必须手动发布端口:
docker-compose run -d -p 5432:5432 db
Instead of using expose us this instead:而不是使用暴露我们这个来代替:
ports:
- "5432:5432"
This defines the port forwarding to the docker container这定义了端口转发到 docker 容器
You should remove expose option from your docker-compose.yml file and add ports option such as:您应该从 docker-compose.yml 文件中删除公开选项并添加端口选项,例如:
ports:
-"5432:5432"
Then you can connect to database by host localhost
from your application.然后,您可以通过应用程序中的主机localhost
连接到数据库。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.