所以我试着把我的Docker应用程序(python-1)连接到另一个Docker应用程序(postgres),但是它给了我这个错误:
psycopg.OperationalError: connection failed: Connection refused
python-1 | Is the server running on host "localhost" (127.0.0.1) and accepting
python-1 | TCP/IP connections on port 25432?
我试过使用condition: service_healthy
,但它不起作用。事实上,我已经确保我的数据库在python-1
尝试连接之前运行。但问题似乎不是数据库还没有打开。我已经使用0.0.0.0
或postgres容器的IP在主机上使用postgres
,它也不起作用。
这是我的docker-compose.yml
version: "3.8"
services:
postgres:
image: postgres:14.6
ports:
- 25432:5432
healthcheck:
test: ["CMD-SHELL", "PGPASSWORD=${DB_PASSWORD}", "pg_isready", "-U", "${DB_USERNAME}", "-d", "${DB_NAME}"]
interval: 30s
timeout: 60s
retries: 5
start_period: 80s
environment:
POSTGRES_USER: ${DB_USERNAME}
POSTGRES_PASSWORD: ${DB_PASSWORD}
POSTGRES_DB: ${DB_NAME}
python:
build:
context: .
dockerfile: Dockerfile
depends_on:
postgres:
condition: service_healthy
command: flask --app app init-db && flask --app app run -h 0.0.0.0 -p ${PORT}
ports:
- ${PORT}:${PORT}
environment:
DB_HOST: localhost
DB_PORT: 25432
DB_NAME: ${DB_NAME}
DB_USERNAME: ${DB_USERNAME}
DB_PASSWORD: ${DB_PASSWORD}
这是我的Dockerfile:
# syntax=docker/dockerfile:1
FROM python:3.10
WORKDIR /app
COPY requirements.txt requirements.txt
RUN pip3 install -r requirements.txt
COPY . .
1条答案
按热度按时间jexiocij1#
在容器中,
localhost
表示容器本身。Docker网络上的不同container可以使用服务名作为主机名进行通信。同样,在Docker网络上,您可以使用未Map的端口号。
因此,将环境变量更改为
你应该能和他交流。