linux - 在入口点脚本中无法访问通过 docker 容器中的 -e 标志传递的环境变量

标签 linux docker

我正在尝试通过 docker run 命令运行 docker 容器。我通过 -e 标志指定一个环境变量。奇怪的是,如果我将/bin/bash 执行到容器中,我能够读取该环境变量,但不能在 Dockerfile 中定义的入口点脚本中读取。

我的 docker 容器以 debian:9 为基础,入口点脚本是一个简单的 bash 脚本,它记录一些数据和环境变量。

docker 文件:

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运行命令:

docker run -e LICENSE_KEY=123 <docker image>

最佳答案

您在入口点使用了 sudo。要保留环境变量,您需要使用 -E, --preserve-env 选项。 在 dockerfile 中,将入口点更新为以下应该有效:

ENTRYPOINT ["sudo", "-E", "/bin/bash", "-c", "./starter-service.sh"]

关于linux - 在入口点脚本中无法访问通过 docker 容器中的 -e 标志传递的环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50490402/

相关文章:

java - 使用 Java 运行 shell 脚本将文件复制到 docker 返回错误

git - 如何将带有子模块的项目与 Gitlab CI docker runner 集成?

linux - 在ksh中获取字符串的最后n个字符

linux - 如何使用 Crontab 命令从上午 10 点到 6 点设置 Cronjob :45 pm at 15 min interval

docker - 使用leiningen构建非uberjar Docker镜像

docker - 为什么默认情况下所有端口都使用此 Docker 镜像发布

linux - 错误 : 'b' argument of 'sign' intrinsic at (1) must be the same type and kind as 'a'

Linux命令: Find string in files content

linux - 如何通过给定设备(不是默认设备)发送数据?

docker - Google Compute Engine容器端口已关闭