是否可以使用和环境变量作为Docker健康检查

时间:2019-07-04 08:29:40

标签: docker

我有一个自定义的mysql映像。当我们运行容器时,它会从我们的工件中下载一个mysql转储以加载一些数据。我的docker run命令中具有以下运行状况检查:

--health-cmd='mysql -u myusername -pMyPassword'

但是我要做的是在导入数据后将容器的运行状况设置为正常,通常需要5分钟左右。我的一个想法可能是设置一个环境变量,但是在那种情况下,我不知道health-cmd是什么。也许有更好的方法可以做到这一点?

我只是从docker开始,我的知识非常有限。

1 个答案:

答案 0 :(得分:1)

一个简单的解决方案是在完成加载后更新特殊表(例如status)。然后,用bash脚本替换运行状况检查命令

#!/usr/bin/env bash
# the table status is updated when the load finishes
SQLSTMT="SELECT status FROM myDatabase.status WHERE status='done'"

# execute the SQL script and get the result
STATUS=`mysql -AN -e "${SQLSTMT}"`

# return exit code 0 (container healthy) if status is done,
# otherwise exit code 1 (container is not healthy)
[ "$STATUS" == 'done' ]

health-cmd变为:

--health-cmd='/path/to/script.sh'

即使在加载过程结束后创建表,它也应该起作用。

另一个选项是在加载完成后创建一个新文件(甚至为空)。运行状况命令将测试文件的存在:

--health-cmd="/usr/bin/test -f /path/to/file"