Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Docker在后台运行命令吗?

Docker在后台运行命令吗?
EN

Stack Overflow用户
提问于 2018-02-22 23:08:44
回答 1查看 222关注 0票数 0

我正在bash上运行一个docker命令,看起来在启动这个命令控件之后,立即开始执行下一行,而不是等待docker容器启动。这就是码头的工作方式吗?

更新:我使用-dit作为属性,这意味着它是以分离模式运行的,我认为这解释了为什么它会立即跳到下一行。因为它是VM的启动脚本,所以它必须被分离,但是是否有任何选项,我们至少可以等待码头容器完成它的配置?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-23 00:09:41

-d导致容器立即分离。所有容器都有不同的概念,它们什么时候“完成了它们的配置”,而Docker不知道每个容器的内部是如何工作的,所以Docker很难对此负责。

Docker添加了一个HEALTHCHECK,因此您可以为您的容器专门定义一个测试。然后,您可以查询容器状态,并等待它在脚本中成为healthy

代码语言:javascript
运行
AI代码解释
复制
HEALTHCHECK --interval=1m --timeout=5s \
  CMD curl -f http://localhost/ || exit 1

然后在脚本中等待

代码语言:javascript
运行
AI代码解释
复制
now="$(date +%s)"
let timeout=now+60
while sleep 5; do
  res="$(docker inspect --format='{{.State.Health}}' container_id) 2>&1"
  if [ "res" == "healthy" ]; then break; fi
  if [ "$(date +%s)" -lt "$timeout" ]; then
    echo "Error timeout: $res"
    # handle error
    break
  fi
done

如果要放弃容器中的curlnc,可以修改等待以运行任何命令,如HEALTHCHECKnc

docker logs container_id还可能包含需要等待的信息。大多数守护进程都会记录类似于“准备好接受连接”之类的内容。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48942860

复制
相关文章

相似问题

添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档