目录
正确答案
首页 后端开发 Golang docker compose healthcheck 未退出并出现错误无法启动

docker compose healthcheck 未退出并出现错误无法启动

Feb 06, 2024 am 08:50 AM
overflow

docker compose healthcheck 未退出并出现错误无法启动

问题内容

我有这个撰写文件:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

version: "3"

services:

  app:

    build: .

    ports:

      - 8080:8080

    volumes:

      - "./:/src"

    healthcheck:

      test: ["CMD-SHELL", "curl -f http://localhost:8080/fail-health-check || exit 1"]

      interval: 5s

      timeout: 5s

      retries: 1

    command: ["go", "run", "main.go"]

登录后复制

Dockerfile:

1

2

3

4

5

6

FROM golang:1.21 as builder

 

WORKDIR /src

 

COPY go.mod go.sum ./

RUN go mod download

登录后复制

当我运行 docker compose 时,应用程序的运行状况检查继续运行。我希望容器退出并出现错误无法启动容器。

golang代码main.go

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

package main

 

import (

    "fmt"

    "log"

 

    "github.com/labstack/echo/v4"

    "github.com/labstack/echo/v4/middleware"

)

 

func main() {

  r := echo.New()

  r.Use(middleware.Logger())

   

  fmt.Println("start http server on port 8080")

  if err := r.Start(":8080"); err != nil {

    log.Fatal(err)

  }

}

登录后复制

这里是登录应用程序:

1

test_healthcheck_go_app-app-1  | {"time":"2023-11-14T04:08:42.450751594Z","id":"","remote_ip":"127.0.0.1","host":"localhost:8080","method":"GET","uri":"/fail-health-check","user_agent":"curl/7.88.1","status":404,"error":"code=404, message=Not Found","latency":26375,"latency_human":"26.375µs","bytes_in":0,"bytes_out":24}

登录后复制

docker ps 输出

1

2

CONTAINER ID   IMAGE                         COMMAND            CREATED          STATUS                      PORTS                    NAMES

ff389f13ab1d   test_healthcheck_go_app-app   "go run main.go"   48 seconds ago   Up 46 seconds (unhealthy)   0.0.0.0:8080->8080/tcp   test_healthcheck_go_app-app-1

登录后复制

正确答案


  1. 您的应用程序不知道它正在容器中运行。
  2. 您的主进程(go run main.go)正在以 PID 1 运行,您需要停止该进程才能退出容器,并且该进程受到保护。

了解了这两个事实,您就有了几种可能性:

  1. 在容器内安装 docker cli。然后将 docker 套接字映射到容器中并运行 docker stop。将套接字映射到容器中意味着安全问题——请小心操作。

  2. 运行 ps -afx | 等命令grep 去 | awk '{print }' | xargs Kill -9 (对这个答案表示敬意),即特别是在您的 healthcheck 中,它可能看起来像 curl -f http:// /本地主机:8080/失败健康检查 || (ps -afx | grep go | awk '{print }' | xargs Kill -9)

  3. 但在我看来,您真正需要的是容器编排系统,例如 Kubernetes。这个建议可能有点过分,也可能不是。取决于您的项目计划。无论如何,它将帮助您更稳健地管理正在运行的容器。

如果您想产生错误,则取决于您使用的日志驱动程序。使用 syslog 驱动程序,Docker 容器将日志写入 /var/log/syslog。因此,在退出之前,您可能需要 echo "Error text"/var/log/syslog

以上是docker compose healthcheck 未退出并出现错误无法启动的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门文章

仓库:如何复兴队友
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶体解释及其做什么(黄色晶体)
1 周前 By 尊渡假赌尊渡假赌尊渡假赌

热门文章

仓库:如何复兴队友
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶体解释及其做什么(黄色晶体)
1 周前 By 尊渡假赌尊渡假赌尊渡假赌

热门文章标签

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

比特币诞生至今价格2009-2025 最全的BTC历史价格汇总 比特币诞生至今价格2009-2025 最全的BTC历史价格汇总 Jan 15, 2025 pm 08:11 PM

比特币诞生至今价格2009-2025 最全的BTC历史价格汇总

Windows11右下角时间没了怎么办_Windows11右下角时间没了解决方法 Windows11右下角时间没了怎么办_Windows11右下角时间没了解决方法 May 06, 2024 pm 01:20 PM

Windows11右下角时间没了怎么办_Windows11右下角时间没了解决方法

Java 函数有哪些社区论坛或讨论组可以提问和讨论? Java 函数有哪些社区论坛或讨论组可以提问和讨论? Apr 28, 2024 pm 02:12 PM

Java 函数有哪些社区论坛或讨论组可以提问和讨论?

python怎么用别人的代码 python怎么用别人的代码 May 05, 2024 pm 07:54 PM

python怎么用别人的代码

Java 函数开发中常见的异常类型及其修复措施 Java 函数开发中常见的异常类型及其修复措施 May 03, 2024 pm 02:09 PM

Java 函数开发中常见的异常类型及其修复措施

win11电脑时间一直不对怎么办?win11电脑时间不对怎么调整方法 win11电脑时间一直不对怎么办?win11电脑时间不对怎么调整方法 May 03, 2024 pm 09:20 PM

win11电脑时间一直不对怎么办?win11电脑时间不对怎么调整方法

overflow在css中是什么意思 overflow在css中是什么意思 Apr 28, 2024 pm 03:15 PM

overflow在css中是什么意思

抖音乱封账号没人管吗?可以二次申诉吗? 抖音乱封账号没人管吗?可以二次申诉吗? May 03, 2024 am 09:37 AM

抖音乱封账号没人管吗?可以二次申诉吗?

See all articles