在docker上定义了Env var,但未返回任何值

2024-10-06 13:56:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在处理使用firesh/nginx lua创建的docker映像(Linux发行版为Alpine):

FROM firesh/nginx-lua

COPY ./nginx.conf /etc/nginx
COPY ./handler.lua /etc/nginx/
COPY ./env_var_echo.py /etc/nginx/

RUN apk update
RUN apk add python3
RUN nginx -s reload

我运行图像,然后进入docker:

docker run -it -d -p 8080:80 --name my-ngx-lua nginx-lua
docker exec -it my-ngx-lua sh

然后我从docker内部定义一个新的环境变量

/etc/nginx # export SECRET=thisIsMySecret
/etc/nginx # echo $SECRET
thisIsMySecret
/etc/nginx #

编辑:定义新的环境变量后,我退出容器,然后再次进入容器,它不再存在:

/etc/nginx # exit
iy@MacBook-Pro ~ % docker exec -it my-ngx-lua sh
/etc/nginx # echo $SECRET

/etc/nginx #

我运行python脚本,希望收到“thisIsMySecret”,这是我定义的值

import os

secret_key = os.environ.get('SECRET')
print(secret_key + '\n')

但是我得到的是没有

只有当我调用任何已经随docker一起出现的环境变量时(例如PATH),python才会返回它的值。但如果它是我刚刚定义的一个env变量,它将返回None

顺便说一句,我对lua也做了同样的尝试,得到了nil。因此,我很确定问题来自阿尔卑斯山

我不是在寻找一个解决方案,比如从docker build中定义env var

谢谢


Tags: dockerrunechoenvsecret定义my环境变量
1条回答
网友
1楼 · 发布于 2024-10-06 13:56:53

这个

After defining the new env var, I exit the container

这是原因。导出的变量仅在主进程存在时存在,并且仅对声明该变量的进程可见

您需要的是在启动容器时使用-e选项:

docker run -e SECRET=mysecret ...

使用此docker,将环境变量添加到主进程(本例中为NGINX)和docker exec命令中

相关问题 更多 >