我正在处理使用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
谢谢
这个
这是原因。导出的变量仅在主进程存在时存在,并且仅对声明该变量的进程可见
您需要的是在启动容器时使用
-e
选项:使用此docker,将环境变量添加到主进程(本例中为NGINX)和
docker exec
命令中相关问题 更多 >
编程相关推荐