这是我的docker-compose
version: '2'
services:
weather-cities:
build:
context: .
volumes:
- .:/usr/app
- /usr/app/node_modules/
ports:
- "8080:8080"
# Set environment variables from this file
# env_file:
# - .env
# Overwrite any env var defined in .env file (if required)
environment:
- DB_NAME=test
- DB_PORT=5432
- DB_HOST=postgres
- DB_USERNAME=test
- DB_PASSWORD=challenge
- APP_PORT=8080
links:
- postgres
postgres:
image: "postgres:9.4.11"
ports:
- "5432:5432"
environment:
- POSTGRES_USER=test
- POSTGRES_PASSWORD=challenge
运行此迁移脚本
"db:migrate": "./node_modules/.bin/sequelize --migrations-path=migrations --models-path=models --config=config/config.js db:migrate"
这是我的Dockerfile
FROM node:8.10.0
WORKDIR /usr/app
COPY package.json .
RUN npm install --quiet
COPY . .
RUN npm run db:migrate
RUN npm run db:seed
EXPOSE 8080
CMD ["npm", "start"]
输出:
已加载的配置文件“ config / config.js”。使用环境 “发展”。
错误:连接ECONNREFUSED 127.0.0.1:5432
config.js
let config = {
"development": {
"username": process.env.DB_USERNAME,
"password": process.env.DB_PASSWORD,
"database": process.env.DB_NAME,
"host": process.env.DB_HOST,
"dialect": "postgres",
"port": process.env.DB_PORT
}
};
module.exports = config;
答案 0 :(得分:1)
运行docker-compose up
时,幕后发生了两件事:
docker-compose build
-映像是从指定的Dockerfile
和context
构建的,或者是从docker映像存储库中提取的。docker-compose start
-容器从服务映像中启动在build
阶段,您的容器尚未启动并运行。
这就是导致您的实际问题的原因,您希望在node
构建中,postgress
容器启动,运行并监听端口5432
,这永远都是不正确的,因为在构建所有映像之前,不会发生容器启动阶段。
您想要实现的目标可以通过entrypoint
完成。