我正在使用postgres、redis和node.js(使用yarn添加依赖项),并尝试将其与docker-compose.yml文件集成。
我有以下docker-compose.yml:
version: '3'
services:
postgres:
image: postgres:latest
restart: unless-stopped
environment:
- POSTGRES_DB=mybase
- POSTGRES_USER=myuser
- POSTGRES_PASSWORD=mypass
redis:
image: redis:latest
restart: unless-stopped
migrate:
build: .
entrypoint: node_modules/.bin/sequelize db:migrate --config src/config/database.js --migrations-path src/database/migrations/
volumes:
- ./:/app
- /app/node_modules
depends_on:
- postgres
wavetech-be:
build:
dockerfile: Dockerfile
context: .
restart: on-failure
volumes:
- /app/node_modules
- ./:/app
environment:
- REDIS_HOST=redis
- REDIS_PORT=6379
- DB_HOST=postgres
- DB_USER=myuser
- DB_PASS=mypass
- DB_PORT=5432
- DB_NAME=mybase
depends_on:
- redis
- migrate
以及以下dockerfile:
FROM node:alpine
WORKDIR "/app"
COPY ./package.json ./
RUN apk add yarn
RUN yarn
COPY . .
CMD [ "yarn", "dev" ]
但是,在docker组装时,两个数据库的连接都会出现问题:
migrate_1 |
migrate_1 | ERROR: connect ECONNREFUSED 127.0.0.1:5432
migrate_1 |
...
wavetech-be_1 | (node:85) UnhandledPromiseRejectionWarning: Error: connect ECONNREFUSED 127.0.0.1:6379
1条答案
按热度按时间3mpgtkmj1#
答案有两部分:
首先,正如@jornsharpe所指出的,迁移服务的描述缺少环境变量。因此,与卷一样,每个服务都需要配置自己的环境变量。
其次,我使用bull来管理我的redis服务器。我正在导入一个配置并将其直接传递给redis,所以:
原来bull只是想使用默认的redis配置。当我将环境变量直接传递到bull配置中时,它工作正常: