我创建了一个bash脚本来自动化正在运行的docker容器的borg备份。在启动备份之前,应该暂停容器。只有在成功暂停容器之后才能执行脚本。
但是现在我得到了一个错误,容器不能暂停。但是,docker-compose发出退出代码0,脚本继续运行。
下面是我的脚本中的一个片段:
echo "Pausing container ..."
docker-compose \
--file [...] \
--project-directory [...] \
pause
docker_exit=$?
## don't start backup if container isn't paused
if [ ${docker_exit} -eq 0 ]; then
echo "... container paused successfully"
elif [ ${docker_exit} -eq 1 ]; then
echo "... container not paused with warnings"
echo "Logfile for backup script: ${log}"
exit ${docker_exit}
else
echo "... container not paused with errors"
echo "Logfile for backup script: ${log}"
exit ${docker_exit}
fi
当脚本通过cron执行时,我在日志文件中得到以下输出:
Pausing container ...
Pausing [...] ...
^[[1A^[[2K^MPausing [...] ... ^[[31merror^[[0m^M^[[1B
ERROR: for [...] Cannot pause container [...]: OCI runtime pause failed: unable to freeze: unknown
... container paused successfully
我已经试图在正式的对接文档中找到一个提示,但最后我在https://docs.docker.com/engine/reference/commandline/compose_向上/#选项找到了停靠-撰写选项“--退出-代码-从”,这不是正确的解决方案。
所以也许有人看到了我的错误并能帮我?非常感谢!
如果有些事情不能理解或者缺少一些细节,我会添加它,如果你给我一个提示:)
发布于 2022-07-08 14:44:36
这看上去很奇怪。我认为docker-compose
应该从底层的docker中传递退出代码,所以它要么是一个bug,要么问题更深。如果我没有弄错的话,“堆栈”就是docker-compose
-> docker
-> cgroup freezer
我建议在单个容器上只使用docker
cli (不进行撰写)对脚本进行测试运行,以获取退出代码。如果退出代码是正确的(不总是0),那么它很可能是docker-compose
中的一个错误。
另一种选择是找出暂停失败的原因:)脚本是否只有在从crontab运行时才会这样做?对接者撰写的东西是公开的吗?这样我就可以复制它了?
https://serverfault.com/questions/1105102
复制