我已经试了几个小时了,但类似问题的解决方案似乎对我不起作用。。。 我正在使用docker compose设置一个postgresql数据库并运行一个python Web服务器,我想从这里连接到我的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:
我尝试按如下方式连接(我已经了解到,尽管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
提前感谢,, 杰基
如果在映像上运行
docker run
,它只执行该命令行上的操作,而不执行其他操作。特别是,普通的docker
命令不知道docker-compose.yml
和您可能在那里指定的任何设置简单的答案是总是使用
docker-compose up
来启动容器原则上,您可以将
docker-compose.yml
文件转换为显式的docker
命令。您至少需要手动创建Docker网络并指定容器名称:不过,这并没有包括Compose设置中的其他选项,特别是数据库持久性。有足够多的设置,你想把它们写在一个文件中,在这一点上,你基本上已经重建了撰写环境
相关问题 更多 >
编程相关推荐