gpt4 book ai didi

node.js - docker env 变量显示未定义

转载 作者:行者123 更新时间:2023-11-29 13:10:32 25 4
gpt4 key购买 nike

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

输出:

Loaded configuration file "config/config.js". Using environment "development".

ERROR: connect 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;

最佳答案

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

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

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

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

关于node.js - docker env 变量显示未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55366676/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com