Keluar selepas bekas selesai berjalan

WBOY
Lepaskan: 2024-02-09 09:50:19
ke hadapan
1081 orang telah melayarinya

Keluar selepas bekas selesai berjalan

Dalam pembangunan web, bekas ialah teknologi biasa, seperti Docker, Kubernetes, dsb. Mereka boleh menyediakan pengasingan persekitaran dan fungsi pengurusan sumber, membolehkan aplikasi berjalan dalam persekitaran yang berbeza. Walau bagaimanapun, kadangkala kami mahu bekas itu keluar secara automatik selepas ia selesai dijalankan, dan bukannya mengekalkannya. Jadi, bagaimana untuk melaksanakan bekas untuk keluar secara automatik selepas ia selesai dijalankan? Artikel ini akan memperkenalkan anda kepada beberapa kaedah dan teknik pelaksanaan.

Kandungan soalan

Pelayan gentian golang saya secara automatik keluar dan memaparkan mesej berikut apabila dijalankan di google cloud run:

container called exit(0).
Salin selepas log masuk

Saya menjalankannya menggunakan fail docker berikut

# use the offical golang image to create a binary.
from golang:buster as builder

# create and change to the app directory.
workdir /app

# retrieve application dependencies.
copy go.mod ./
copy go.sum ./
run go mod download

copy . ./
run go build

# use the official debian slim image for a lean production container.
# https://hub.docker.com/_/debian
# https://docs.docker.com/develop/develop-images/multistage-build/#use-multi-stage- builds
from debian:buster-slim
run set -x && apt-get update && debian_frontend=noninteractive apt-get install -y \
    ca-certificates && \
    rm -rf /var/lib/apt/lists/*

# copy the binary to the production image from the builder stage.
copy --from=builder /app/redirect-middleware.git /app/
copy --from=builder /app/pkg /app/pkg/

expose 8080

# run the web service on container startup.
cmd ["/app/redirect-middleware.git", "dev"]
Salin selepas log masuk

dan main.go saya (hanya func main())

func main() {
    // Load env config
    c, err := config.LoadConfig()
    if err != nil {
        log.Fatalln("Failed at config", err)
    }

    // init DB
    db.InitDb()

    // init fiber API
    app := fiber.New()
    log.Print("Started new Fiber app...")

    // initial route sending version of API
    app.Get("/", func(c *fiber.Ctx) error {
        return c.SendString(fmt.Sprintf("Redirection middleware - v%s", viper.Get("Version").(string)))
    })
    log.Print("Default root route set...")

    // api routes
    api := app.Group("/api") // /api
    v1 := api.Group("/v1") // /api/v1
    log.Print("api/v1 group set...")

    // register routes v1
    mastermenus.RegisterRoutes(v1)
    log.Print("Route registered...")

    app.Listen(c.Port)
    log.Print("Api started listening in port 8080")
}
Salin selepas log masuk

Barisan terakhir dilaksanakan dengan baik dalam log larian awan google dan saya dapat melihat api 开始侦听端口 8080.

Mengapa bekas saya keluar bersendirian? Ia harus memulakan api serat.

Penyelesaian

Saya jumpa masalah ini. Dalam stage.env 文件中,我将端口设置为 :8080 saya. Secara tempatan, lulus app.listen(c.port) 可以按预期很好地转换为 app.listen(":8080") 。当在 cloud run 中使用它时,它会转换为 app.listen("8080"), yang sudah tentu tidak berfungsi kerana menganggap ini adalah tuan rumah dan bukan pelabuhan.

Saya menambah app.listen(":" + c.port) dan ia berkesan.

Jika ini berlaku kepada anda, lihat ralat:

errApp := app.Listen(":" + c.Port)
if errApp != nil {
    log.Printf("An error happened while running the api: %s", errApp)
} else {
    log.Printf("Api started listening in port %s", c.Port)
}
Salin selepas log masuk

Dan bertindak sewajarnya.

Atas ialah kandungan terperinci Keluar selepas bekas selesai berjalan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:stackoverflow.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!