【发布时间】:2021-03-22 17:43:01
【问题描述】:
我已经尝试了几个小时,但类似问题的解决方案似乎对我没有用... 我正在使用 docker-compose 设置一个 postgresql 数据库并运行一个 python 网络服务器,我想从该服务器连接到我的 postgressql 数据库(所以它在容器内运行)
version: '3.8'
services:
database:
container_name: database
hostname: database
image: postgres
restart: always
environment:
POSTGRES_DB: mydatabase
POSTGRES_USER: postgres
POSTGRES_PASSWORD: password
volumes:
- postgres:/pgdata
- ./application/ressources/fixtures.sql:/docker-entrypoint-initdb.d/fixtures.sql
ports:
- "5432:5432"
application:
container_name: application
build: .
ports:
- "5001:5001"
volumes:
- ./application:/application
restart: always
depends_on:
- database
volumes:
postgres:
我尝试按如下方式连接(我已经读到尽管 depends on 在我的 dockerfile 中,但数据库需要更多时间才能接受连接,因此我添加了重试逻辑):
retries = 0
while retries < 5:
retries = retries + 1
self.conn = psycopg2.connect(user='postgres', password='password',
host='database', port="5432", database='mydatabase')
if not self.conn:
logging.info("retry to connect")
sleep(5)
奇怪的是,当使用 docker-compose -f docker-compose.yml up 运行它时,一切正常。 但是当我构建映像 (docker build -t myapp:0.1) 并运行它 (docker run myapp:0.1) 时,它给了我以下错误:
File "/application/libraries/database.py", line 18, in establishConnection
self.conn = psycopg2.connect(user=CONFIG.DATABASE_USER, password=CONFIG.DATABASE_PASSWORD,
File "/usr/local/lib/python3.9/site-packages/psycopg2/__init__.py", line 127, in connect
conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
psycopg2.OperationalError: could not translate host name "database" to address: Name or service not known
我已经读过,当使用 docker-compose 时会创建一个网络,所以这不可能是这里的错误我猜Docker Compose doku
提前致谢, 杰基
【问题讨论】:
-
当进入容器并执行主机名时,它会打印数据库,因此主机名设置正确......
标签: python python-3.x postgresql docker docker-compose