容器部署在docker中。我尝试了不同的方法,没有任何帮助。可能是什么问题呢?外部因素会造成问题吗?
services:
db:
container_name: "db"
image: postgres:14.1-alpine
restart: always
environment:
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=postgres
- POSTGRES_DB=postgres
- POSTGRES_PORT=5432
- POSTGRES_HOST=db
- POSTGRES_HOST_AUTH_METHOD=trust
- PGDATA=/var/lib/postgresql/data/pgdata
ports:
- "5432:5432"
networks:
- custom
db_name = 'postgres'
db_user = 'postgres'
db_password = 'postgres'
db_host = 'db'
conn =psycopg2.connect(dbname=db_name, user=db_user, password=db_password, host=db_host)
我试过了
import psycopg2
# Параметры подключения к базе данных PostgreSQL
db_name = 'postgres'
db_user = 'postgres'
db_password = 'postgres'
db_host = 'db'
conn =psycopg2.connect(dbname=db_name, user=db_user, password=db_password, host=db_host)
# Создание курсора для выполнения SQL запросов
cursor = conn.cursor()
# Пример выполнения запроса SELECT
cursor.execute("SELECT * FROM users")
# Получение результатов запроса
rows = cursor.fetchall()
# Вывод результатов
for row in rows:
print(row)
# Закрытие курсора и соединения
cursor.close()
conn.close()
结果
Traceback (most recent call last):
File "c:\Мои проекты\pythonProject\db\conect.py", line 48, in <module>
conn =psycopg2.connect(dbname=db_name, user=db_user, password=db_password, host=db_host)
File "C:\Мои проекты\pythonProject\.venv\lib\site-packages\psycopg2\__init__.py", line 122, in connect
conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
psycopg2.OperationalError
没有延迟,这是最烦人的。我将非常感激。
就像其他人已经说过的那样,
db
可以(并且应该)仅在容器间通信中用作主机名,它在主机上作为容器主机名不可见。
相反,当从主机连接到数据库容器时,您可以使用
localhost
。这就是为什么还需要 ports
部分,您将端口 5432
发布到主机外部可用。这确实是这里的常见做法。
更好的是使用
"127.0.0.1:5432:5432"
将其真正发布到本地主机。目前它也在您的主机外部开放。