使用-e运行时,要求将环境变量赋予图像

时间:2019-10-16 17:59:40

标签: docker environment-variables dockerfile

我有一个容器映像,需要设置环境变量才能运行。但是,如果使用-d运行,除非监视容器,否则运行容器的人员不会注意到缺少的东西。 docker [container] run有没有一种方法可以在启动容器之前检查是否已将环境变量赋予容器。

2 个答案:

答案 0 :(得分:0)

在分离模式下,使用-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

答案 1 :(得分:0)

否:当前尚无办法使Docker意识到环境变量形式的“依赖关系”。此答案适用于那些真正来这里只是在寻找缺少值的情况下退出入口点脚本的规范方法的人。


POSIX Shell使用选项 -u (扩展未设置的变量时出错)和 -e (当任何语句返回错误/非零退出时退出外壳)码)。我们还具有来评估而不是调用表达式。将这些放在一起,我们应该能够制作一个public override void Load() { //.... Set("KeyName", "KeyValue"); } ,不管这样的sh实现如何工作:

keys = pygame.key.get_pressed() # this returnes a dictionary of keys

if keys[pygame.K_w]: # if "w" was pressed
    [...]

这将退出脚本,并显示类似于entrypoint.sh的错误。

执行相同操作的另一种方法,但是在带有自定义错误消息的原始示例的上下文中,可以利用“ 如果为Null或Unset时显示错误”运算符({{1 }),如下所示:

#!/bin/sh -e -u

( : $USERNAME )
( : $PASSWORD ) 

exec "$@"
相关问题