为了账号安全,请及时绑定邮箱和手机立即绑定

Golang Docker 容器未在 Docker-Compose 中重新启动

Golang Docker 容器未在 Docker-Compose 中重新启动

Go
慕田峪9158850 2023-06-05 19:47:02
我希望能够在无法连接到 rabbitmq 时重新启动 golang docker 文件,不幸的是,我的 golang 容器将退出但永远不会重新启动,我不知道为什么。码头工人组成:version: '3.3'services:  mongo:    image: 'mongo:3.4.1'    container_name: 'datastore'    ports:      - '27017:27017'  rabbitmq:    restart: always    tty: true    image: rabbitmq:3.7-management-alpine    hostname: "rabbit"    ports:      - "15672:15672"       - "5672:5672"    labels:      NAME: "rabbitmq"    volumes:      - ./rabbitmq-isolated.conf:/etc/rabbitmq/rabbitmq.config    healthcheck:      test: ["CMD", "curl", "-f", "http://localhost:15672"]      interval: 3s      timeout: 5s      retries: 20  api:    restart: always    tty: true    container_name: 'api'    build: '.'    working_dir: /go/src/github.com/patientplatypus/project    ports:      - '8000:8000'    volumes:      - './:/go/src/github.com/patientplatypus/project'      - './uploads:/uploads'      - './scripts:/scripts'      - './templates:/templates'    depends_on:      - "mongo"      - "rabbitmq"码头文件:FROM golang:latestWORKDIR /go/src/github.com/patientplatypus/projectCOPY . .RUN go get github.com/imroc/req<...more go gets...>RUN go get github.com/joho/godotenvEXPOSE 8000ENTRYPOINT  [ "fresh" ]这是我的 golang 代码:package mainimport (    "fmt"    "log"    "os"    "os/exec"    "net/http")func main() {    fmt.Println("Golang server started")    godotenv.Load()    fmt.Println("now doing healthcheck on rabbit")    exec.Command("docker-compose restart api")    os.Exit(1)  <...>
查看完整描述

1 回答

?
慕村9548890

TA贡献1884条经验 获得超4个赞

Docker 文档说:

重启策略只有在容器启动成功后才会生效。在这种情况下,启动成功意味着容器已经启动至少 10 秒,并且 Docker 已经开始对其进行监控。这可以防止根本没有启动的容器进入重启循环。

由于您显示的 Go 代码基本上立即退出,因此它永远不会满足这个 10 秒最小规则。

您可以使用time.After强制 Go 等待,直到进程至少存活 10 秒,有点像:

ch := time.After(10 * time.Second)
defer (func() { fmt.Println("waiting"); <-ch; fmt.Println("waited") })()

也就是说,创建一个将在 10 秒后接收事件的通道,然后在返回之前实际接收它(如果发生则立即接收,否则等待)main。从使用https://play.golang.org/p/zGY5jFWbXyk开始,一个技巧是在从频道接收后需要有一些可观察到的效果,否则它实际上不会等待。


查看完整回答
反对 回复 2023-06-05
  • 1 回答
  • 0 关注
  • 106 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信