亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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 關注
  • 144 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號