You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker Compose中wait-for脚本未生效,如何查看日志验证脚本运行状态?

排查Wait-For脚本运行状态与日志查看方法

首先,咱们先解决日志查看的问题,这样能直接看到脚本有没有在执行、执行过程中出了什么问题:

1. 查看App2容器的日志

  • 如果你想查看容器的历史日志,直接运行:
    docker logs y2
    
  • 如果想要实时追踪日志(比如脚本正在循环等待时),加上-f参数:
    docker logs -f y2
    
  • 也可以用Docker Compose的专属命令查看服务日志,更贴合你的配置场景:
    docker-compose logs app2
    
    这个命令会拉取app2服务从启动以来的所有日志,包括启动失败的情况。

2. 给脚本加更详细的调试输出

如果默认日志信息不够,你可以修改自己的wait-for脚本,添加更细节的调试内容,比如在循环里打印当前检查的容器状态:

#!/bin/bash
container_name="$1"
c=1
until docker container ls --filter "name=$container_name" --filter "status=running" | grep healthy; do
  >&2 echo "[$(date)] Server $container_name is unavailable - sleeping"
  # 新增:打印当前容器的实际状态,方便排查
  >&2 echo "[$(date)] Current container status: $(docker container ls --filter "name=$container_name" --format "{{.Names}} {{.Status}}")"
  sleep 5
  ((c=c+1))
  >&2 echo "[$(date)] Retry count: $c"
  if [[ "$c" -eq 20 ]] ;then
    >&2 echo "[$(date)] Max retries reached, exiting"
    exit 1;
  fi
done
>&2 echo "[$(date)] Server $container_name is healthy, proceeding!"

修改后重新启动容器,日志里会清晰显示每一步的检查结果,帮你确定脚本是否在正常执行。

3. 额外排查点:脚本是否被正确执行

从你的docker-compose.yml来看,app2的command写的是./wait-for-it.sh,但你自己编写的脚本叫wait-for——这里是不是文件名写错了?如果容器里找不到指定的脚本,会直接报错退出,自然看不到等待状态。你需要把command改成./wait-for,同时确保这个脚本已经被复制到app2的镜像里,或者用volume挂载进去。

另外,你的脚本是检查容器的healthy状态,但app1服务没有配置healthcheck,Docker永远不会标记它为healthy,脚本会一直重试到超时退出。你需要给app1添加健康检查配置,比如(根据app1的实际服务调整检查命令):

app1:
  image: x
  container_name: "xx"
  restart: always
  ports:
    - 222
  healthcheck:
    test: ["CMD", "curl", "-f", "http://localhost:222"] # 示例:检查222端口的HTTP服务
    interval: 5s
    timeout: 5s
    retries: 5
  networks:
    - x_network

4. 验证脚本进程是否在运行

如果容器还在运行,你可以进入容器查看进程列表,确认脚本是否在执行:

docker exec -it y2 ps aux

如果能看到wait-for脚本的进程,说明它正在运行;如果看不到,可能是脚本已经退出或者没被正确启动。

内容的提问来源于stack exchange,提问作者user63898

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 14:17:31