首页 > 解决方案 > 无法将任何 ENV 变量从 docker 传递到 Node process.env

问题描述

我正在努力将任何环境变量从 docker 传递到容器中的节点进程。index.js在键中打印时process.env,这是我得到的:

    SUDO_GID: 0
    SUDO_UID: 0
    SUDO_USER: root
    SUDO_COMMAND: /usr/local/bin/node index.js
    ...

我至少应该得到MY_ENV=text我试图通过的。以下是我迄今为止尝试过的不同方法:

docker run -e MY_ENV=text mytestcontainer

这是我实际运行的代码,以防我在 process.env 中看不到“杀死”的东西:

docker run --privileged -u root -v /sys:/sys -v /dev/mem:/dev/mem -e MY_ENV=text mytestcontainer

docker run --env-file ./.env mytestcontainer

FROM balenalib/raspberrypi3-node

ENV MY_ENV=text

ARG api_port=7070
RUN apt-get update && apt-get install -yq --no-install-recommends pigpio
RUN sudo apt-get install build-essential
RUN sudo apt-get install python
# Create app directory
WORKDIR /opt/app

# Install app dependencies
COPY package.json package-lock.json* ./
RUN npm cache clean --force && npm install

COPY . /opt/app
RUN npm rebuild pigpio
EXPOSE $api_port
CMD [ "npm", "run", "start" ]
version: "3"
services:
  app:
    image: mytestcontainer
    restart: always
    privileged: true
    user: root
    depends_on:
      - postgres
    ports:
      - "7070:7070"
    volumes:
      - /sys:/sys
      - /dev/mem:/dev/mem
    environment:
      MY_ENV: text

  postgres:
    image: postgres:alpine
    ports:
      - "35432:5432"
    volumes:
      - db:/var/lib/postgresql/data
    environment:
      POSTGRES_USER: testUser
      POSTGRES_PASSWORD: test
      POSTGRES_DB: test
      POSTGRES_SCHEMA: test

volumes:
  db:

奇怪的是,即使在 Postgres 图像中,也没有传递任何 env 变量

有关信息,这是我的index.js

require('dotenv').config()

console.log('env variables: ')
Object.entries(process.env).forEach(kv => {
  console.log(kv[0] + ': ' + kv[1])
})
# echo $MY_ENV
text

所以我认为这可能与我的系统有关,但我尝试在 sudo 和另一台机器(树莓派)上运行所有内容,但没有什么不同。同样的问题。

任何帮助或想法将不胜感激:)

标签: node.jsdockerdocker-composeenvironment-variablesdockerfile

解决方案


好的,在我的情况下,这可能会帮助其他人(在 docker 中相当新)问题是访问权限的差异,因为我的启动脚本位于package.json

"scripts": {
    "start": "sudo node index.js"
 },

如您所见,我使用的是 sudo。如果我删除它,我会得到我所有的环境变量process.env 所以这可能意味着 docker 用户与节点进程不同。


推荐阅读