linux - 通过 docker 容器中的 -e 标志传递的环境变量在入口点脚本中不可访问
问题描述
我正在尝试通过 docker run 命令运行 docker 容器。我通过 -e 标志指定环境变量。奇怪的是,如果我将 /bin/bash 执行到容器中,我能够读取该环境变量,但不能在 Dockerfile 中定义的入口点脚本中读取。
我的 docker 容器以 debian:9 为基础,入口点脚本是一个简单的 bash 脚本,它记录一些数据和环境变量。
Dockerfile:
FROM debian:9
RUN apt-get update && apt-get install -y curl sudo supervisor wget
ADD starter-service.sh .
RUN chmod 755 starter-service.sh
ENTRYPOINT ["sudo", "/bin/bash", "-c", "./starter-service.sh"]
启动服务:
#! /bin/bash
license=$LICENSE_KEY
if [ "$license" == "" ]
then
echo "No License Key: "$LICENSE_KEY" arg:"$arg > /tmp/my-service.log
printenv >> /tmp/my-service.log
fi
sleep 1000s
有问题的环境变量是 LICENSE_KEY。码头工人运行命令:
docker run -e LICENSE_KEY=123 <docker image>
解决方案
您在入口点中使用了 sudo。要保留环境变量,您需要使用-E, --preserve-env
选项。在 dockerfile 中,将入口点更新为以下内容应该可以:
ENTRYPOINT ["sudo", "-E", "/bin/bash", "-c", "./starter-service.sh"]
推荐阅读
- python - ElementTree 漂亮打印空行
- python - Python 请求给出 JSONDecodeError
- flutter - 从表列中检索具有非空字符串的值的行
- javascript - 如何在其他js中比较一个数组的元素
- webpack - 带有 webpack 的数据表
- android - react-native 使用emu成功发送图像表单数据,但在真实设备上出现错误422
- python - SimPy:TypeError:schedule() 缺少 1 个必需的位置参数:“事件”
- amazon-web-services - AWS 代码构建:CI 作业期间未找到环境变量
- ios - 代码中的 UIStackView 设置 layoutMargins 会中断对齐
- numbers - 雪花:无法评估不受支持的子查询类型