我正在努力将所有环境变量从docker传递到容器中的节点进程。
在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
。
这是到目前为止我尝试过的不同方法:
docker run --privileged -u root -v /sys:/sys -v /dev/mem:/dev/mem -e MY_ENV=text mytestcontainer
这是我实际运行的代码,以防万一我看不到进程被杀死的情况。
docker run --env-file ./.env mytestcontainer
Dockerfile
ENV
直接在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" ]
中尝试!而且没有任何东西传递给该过程:docker run
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:
不起作用,为什么docker-compose也可以工作!index.js
奇怪的是,即使在Postgres图片中,也不会传递任何env变量
有关信息,这是我的require('dotenv').config()
console.log('env variables: ')
Object.entries(process.env).forEach(kv => {
console.log(kv[0] + ': ' + kv[1])
})
:
# echo $MY_ENV
text
当我直接运行代码而不是在Docker容器中运行时,我所有的env变量都存在于process.env中
当我进入容器时,我可以回显变量:
public Integer parseString(String value) {
return null;
}
所以我认为这可能与我的系统有关,但是我尝试在sudo和其他机器(树莓派)上运行所有内容,没有什么不同。同样的问题。
任何帮助或想法将不胜感激:)
答案 0 :(得分:0)
在我的情况下可能会帮助其他人的东西(在docker中是相当新的)
由于我在package.json
中的启动脚本,问题在于访问权限有所不同:
"scripts": {
"start": "sudo node index.js"
},
如您所见,我正在使用sudo。如果删除它,我的所有env变量都将放在process.env
中
因此,这可能意味着docker用户与节点进程不同。