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

时间:2018-05-23 14:02:04

标签: linux docker

我试图通过docker run命令运行docker容器。我通过-e标志指定一个环境变量。奇怪的是,如果我将exec / 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运行命令:

docker run -e LICENSE_KEY=123 <docker image>

1 个答案:

答案 0 :(得分:1)

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

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