【问题标题】:Run curl commands after docker server (kong) startsdocker server (kong) 启动后运行 curl 命令
【发布时间】:2021-07-06 13:56:20
【问题描述】:

我有一个内部启动服务器的 docker 容器。 (我不拥有这个。我只是重复使用它)

一旦服务器启动,我将运行一些命中该服务器的 curl 命令。 我在脚本中运行上述步骤。这是问题: docker 容器启动,但在内部我认为实际启动其中的服务器需要一些时间。

在该服务器启动并运行之前,curl 命令似乎开始执行并给出找不到服务器的错误。如果我在几秒钟后手动运行它,它可以正常工作。

如果有办法解决这个问题,请告诉我。我不认为出于类似原因使用入口点或 CMD 会起作用。 另外,如果这很重要,我使用的服务器是 kong。

谢谢,哦。

【问题讨论】:

    标签: docker kong


    【解决方案1】:

    对此的一般答案是执行某种健康检查;一旦你确认服务器是健康的,你就可以开始向它发出实时请求。如您所见,现有的容器或单独运行的服务器进程不足以保证容器可以处理请求。

    解决这个问题的典型方法是向服务器发出一些请求,该请求将在服务器准备好之前失败。您无需修改​​容器即可执行此操作。在 Kubernetes 等一些环境中,您可以将运行状况检查或探测指定为部署配置的一部分,但对于简单的 shell 脚本,您可以在循环中运行 curl:

    docker run -p 8080:8080 -d ...
    RUNNING=false
    for i in $(seq 30); do
      # Try GET / and see if it succeeds
      if curl -s http://localhost:8080/
      then
        echo Server is running
        RUNNING=true
        break
      else
        echo Server not running, waiting
        sleep 1
      fi
    done
    if [ "$RUNNING" = false ]; then
      echo Server did not start within 30s
      # docker stop ... && docker rm ...
      exit 1
    fi
    

    【讨论】:

      【解决方案2】:

      如果您只需要知道端口已启动,这个简单的脚本非常方便:

      https://github.com/vishnubob/wait-for-it

      【讨论】:

        猜你喜欢
        • 2021-01-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-10-17
        • 1970-01-01
        • 2021-01-13
        • 1970-01-01
        • 2023-03-09
        相关资源
        最近更新 更多