docker env变量显示未定义

时间:2019-03-26 21:46:53

标签: node.js postgresql docker express

这是我的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;

1 个答案:

答案 0 :(得分:1)

运行docker-compose up时,幕后发生了两件事:

  1. docker-compose build-映像是从指定的Dockerfilecontext构建的,或者是从docker映像存储库中提取的。
  2. docker-compose start-容器从服务映像中启动

build阶段,您的容器尚未启动并运行。
这就是导致您的实际问题的原因,您希望在node构建中,postgress容器启动,运行并监听端口5432,这永远都是不正确的,因为在构建所有映像之前,不会发生容器启动阶段。

您想要实现的目标可以通过entrypoint完成。