【发布时间】:2021-03-08 17:37:11
【问题描述】:
我正在处理我使用 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')
但我得到的是 None。
只有当我使用 docker(例如 PATH)调用 已经来 的任何环境变量时,python 才会返回它的值。但如果它是我刚刚定义的 env var,它将返回 None。
顺便说一句,我对 lua 进行了同样的尝试并收到 nil。因此我很确定问题来自 Alpine。
我不是在寻找像从 docker build 定义环境变量这样的解决方案。
谢谢。
【问题讨论】:
-
您显示的交互式 shell 会话与脚本有何关系?你能提供 Dockerfile 和其他指令来运行容器吗?您通常希望如何设置环境变量?
-
@DavidMaze 我运行了一个 docker,定义了一个新的环境变量并从 python 调用它。 Dockerfile 将如何贡献?无论如何,这是图像:hub.docker.com/r/firesh/nginx-lua
-
如果您只是使用预构建的映像,我对脚本如何进入容器有点困惑。我通常也希望该图像运行 Nginx 而不是交互式 shell。您能否编辑问题以提供您正在运行的 exact 命令,尤其是
docker run命令? -
我运行了 docker,定义了一个新的环境变量并从 python 调用它。它奏效了:pastebin.com/aByMyGZB 请添加更多详细信息。
-
如果您
docker run提供的图像,它运行 Nginx,而不是交互式 shell。您所显示的任何内容都无法表明您是如何运行 Python 脚本的。仅基于您所展示的内容,我建议您启动您的映像FROM python:3.9而不是不相关的 Nginx 映像,并在 Dockerfile 中设置ENV;如果您澄清这三个部分是如何结合在一起的,以及为什么ENV不是一个好的答案,将会有所帮助。
标签: python docker nginx lua alpine