第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

Golang Docker 容器未在 Docker-Compose 中重新啟動

Golang Docker 容器未在 Docker-Compose 中重新啟動

Go
慕田峪9158850 2023-06-05 19:47:02
我希望能夠在無法連接到 rabbitmq 時重新啟動 golang docker 文件,不幸的是,我的 golang 容器將退出但永遠(yuǎn)不會重新啟動,我不知道為什么。碼頭工人組成: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貢獻(xiàn)1884條經(jīng)驗 獲得超4個贊

Docker 文檔說:

重啟策略只有在容器啟動成功后才會生效。在這種情況下,啟動成功意味著容器已經(jīng)啟動至少 10 秒,并且 Docker 已經(jīng)開始對其進(jìn)行監(jiān)控。這可以防止根本沒有啟動的容器進(jìn)入重啟循環(huán)。

由于您顯示的 Go 代碼基本上立即退出,因此它永遠(yuǎn)不會滿足這個 10 秒最小規(guī)則。

您可以使用time.After強(qiáng)制 Go 等待,直到進(jìn)程至少存活 10 秒,有點像:

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

也就是說,創(chuàng)建一個將在 10 秒后接收事件的通道,然后在返回之前實際接收它(如果發(fā)生則立即接收,否則等待)main。從使用https://play.golang.org/p/zGY5jFWbXyk開始,一個技巧是在從頻道接收后需要有一些可觀察到的效果,否則它實際上不會等待。


查看完整回答
反對 回復(fù) 2023-06-05
  • 1 回答
  • 0 關(guān)注
  • 143 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號