Docker 要求在使用“-e”运行时为映像提供环境变量`

Docker 要求在使用“-e”运行时为映像提供环境变量`,docker,environment-variables,dockerfile,Docker,Environment Variables,Dockerfile,我有一个容器映像,需要设置一个环境变量才能运行。但是如果使用-d运行,除非对容器进行监视,否则运行容器的人不会注意到缺少了什么。是否有一种方法可以让docker[container]运行在启动容器之前检查环境变量是否已提供给容器。在分离模式下,使用-d运行时,无法打印需要env的消息,但您可以尝试一种解决方法: Dockerfile FROM alpine COPY entrypoint.sh /usr/bin/ RUN chmod +x /usr/bin/entrypoint.sh ENTRY

我有一个容器映像,需要设置一个环境变量才能运行。但是如果使用
-d
运行,除非对容器进行监视,否则运行容器的人不会注意到缺少了什么。是否有一种方法可以让docker[container]运行在启动容器之前检查环境变量是否已提供给容器。

在分离模式下,使用
-d
运行时,无法打印需要env的消息,但您可以尝试一种解决方法:

Dockerfile

FROM alpine
COPY entrypoint.sh /usr/bin/
RUN chmod +x /usr/bin/entrypoint.sh
ENTRYPOINT ["entrypoint.sh"]
entrypoint.sh

#!/bin/sh
echo "starting container $hostname"
if [ -z "$REQUIRED_ENV" ]; then
  echo "Container failed to start, pls pass -e REQUIRED_ENV=sometest"
  exit 1
fi
echo "starting container with $REQUIRED_ENV"
#your long-running command from CMD
exec "$@"
所以当你和我一起跑步的时候

docker run -it --name envtest  --rm env-test-image 
它将与消息一起退出

starting container 
Container failed to start, pls pass -e REQUIRED_ENV=sometest

使用分离模式的变通方法

docker run -it --name envtest  -d --rm env-test-image && docker logs envtest
否:目前没有办法让Docker意识到环境变量形式的“依赖性”。这个答案适用于那些真正来到这里只是为了寻找一种在缺少值的情况下退出入口点脚本的规范方法的人


POSIX shell采用选项-u(扩展未设置变量时出错)和-e(当任何语句返回错误/非零退出代码时退出shell)。我们还有要计算,但不能调用表达式。把这些放在一起,我们应该能够创建一个
entrypoint.sh
,它可以在不考虑sh实现的情况下工作,如下所示:

#/bin/sh-e-u
(:$USERNAME)
(:$PASSWORD)
执行官“$@”
这将退出脚本,并出现类似于
密码:未设置参数的错误

做同样事情的另一种方法,但在带有自定义错误消息的原始示例的上下文中,可以使用“Display error if Null或Unset”操作符(
${parm:?error}
),如下所示:

#/垃圾箱/垃圾箱
echo“启动容器$hostname”
(:${REQUIRED_ENV?“请通过-e REQUIRED_ENV=sometest”})退出1
echo“使用$REQUIRED\u ENV启动容器”
#从CMD执行的长时间运行的命令
执行官“$@”