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