我正在尝试使用 docker compose 设置一些集成测试。我正在使用 docker compose 来启动 postgres 数据库和 nodejs 服务器。然后我使用 jest 对服务器运行 http 请求。
由于某些原因,我无法解释所有 SQL 查询(即使是最简单的查询)都非常慢(+ 1s)。
这听起来像是两个容器之间的通信问题,但我无法发现它。难道我做错了什么?
这是我的docker-compose.yml
文件。服务器只是一个简单的 express 应用
version: "3.9"
services:
database:
image: postgres:12
env_file: .env
volumes:
- ./db-data:/var/lib/postgresql/data
healthcheck:
test: pg_isready -U test_user -d test_database
interval: 1s
timeout: 10s
retries: 3
start_period: 0s
server:
build: .
ports:
- "8080:8080"
depends_on:
database:
condition: service_healthy
env_file: .env
environment:
POSTGRES_HOST: database
NODE_ENV: test
init: true
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8080/healthcheck"]
interval: 1s
timeout: 10s
retries: 3
start_period: 0s
编辑 我正在使用
Docker version 20.10.2, build 2291f61
macOs BigSur 11.1 (20C69)
最佳答案
通过更改以下内容,尝试对数据文件夹使用 Volume 而不是 Bind Mount:
- ./db-data:/var/lib/postgresql/data
对此:- db-data:/var/lib/postgresql/data
并将此部分添加到撰写文件的末尾:volumes:
db-data:
您可以阅读有关绑定(bind)挂载与卷的更多信息 here
关于node.js - docker中服务器和数据库之间的查询非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65875996/