node.js - docker compose环境变量在nodejs容器中未定义

标签 node.js docker docker-compose environment

当尝试控制台记录在 docker-compose 中定义的环境变量时, Node 容器返回未定义的值。

docker-compose.yml

version: "3"

services: 

    api: 
        build: ./api
        ports: 
            - "3004:3004"
        volumes:
            - type: bind
              source: ./api
              target: /usr/src/api
        working_dir: /usr/src/api
        environment: 
            REDIS_HOST: "redis://redis:6379"
            TEST: "123"
        depends_on: 
            - redis
        networks:
            - backend

    redis: 
        image: "redis:latest"
        ports: 
            - "6379:6379"
        networks:
            - backend
networks:
    backend:
        driver: bridge

我试过更改 yaml 语法 到 - TEST="123" 而不是键值语法只是为了确保。我不确定可能是什么问题。

API dockerfile 如下所示:

FROM node:12


# create destination directory
RUN mkdir -p /usr/src/api
WORKDIR /usr/src/api

# copy the app, note .dockerignore
COPY . /usr/src/api

# Install packages
RUN npm i yarn --save
RUN yarn 

# COPY . /src
EXPOSE 3005

CMD ["yarn", "dev"]

NodeJS 片段:

console.log("redis host! + test");
console.log(process.env.REDIS_HOST, process.env.TEST)

控制台日志输出:

api_1    | redis host! + test
api_1    | undefined undefined

最佳答案

您需要使用 ARGDockerfile 中额外引用环境变量

ARG REDIS_HOST
ARG TEST

关于node.js - docker compose环境变量在nodejs容器中未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69014614/

相关文章:

javascript - Mongoose:我的 findByIdAndUpdate 有什么问题吗?

postgresql - sqlx.Connect() 卡在 docker alpine :latest 中

docker - 获取 "Did you mean to run dotnet SDK commands? Please install dotnet SDK from"

docker - AWS ECS如何在私有(private)桥接网络中启动容器

postgresql - 如何删除docker容器中的postgres数据库

php - 使用docker nginx镜像时我将index.php放在哪里

node.js - AWS Lambda 制作视频缩略图

node.js - 使用 AWS Lambda 检测浏览器版本

node.js - 显示当前使用 node/express/socket.io 构建的聊天中的用户

docker - 单个域的多个位置的 Nginx 代理