Rumah >pembangunan bahagian belakang >Golang >Mengapa tidak boleh mengakses port 8080 dalam docker

Mengapa tidak boleh mengakses port 8080 dalam docker

WBOY
WBOYke hadapan
2024-02-11 18:54:08945semak imbas

Mengapa tidak boleh mengakses port 8080 dalam docker

editor php Xigua berada di sini untuk menjawab soalan biasa: Mengapa bahasa Go tidak boleh mengakses port 8080 dalam bekas Docker? Apabila menggunakan bekas Docker, kami sering menghadapi masalah tidak dapat mengakses port dalaman kontena. Ini sering disebabkan oleh isu konfigurasi rangkaian dengan bekas Docker. Dengan memahami rangkaian Docker dan melaraskan sewajarnya, kami boleh menyelesaikan masalah ini dan membolehkan bahasa Go berjaya mengakses port 8080 dalam bekas Docker. Di bawah, saya akan menerangkan secara terperinci bagaimana untuk menyelesaikan masalah ini.

Kandungan soalan

Jadi saya mahu menggunakan bahagian belakang go mudah saya dalam cloud run. Saya menggunakan gin untuk mengendalikan penghalaan. Fungsi utama saya untuk mengendalikannya kelihatan seperti ini:

func main() {
    r := gin.default()
    r.get("/api/health", handlers.healthcheckhandler())
    r.post("/questions", handlers.createquestionhandler(client))
    r.get("/questions/:level", handlers.getallquestionhandler(client))
    r.run("0.0.0.0:8080")
}

Saya cuba membinanya menggunakan docker dan ia berjaya. Fail docker saya kelihatan seperti ini:

from golang:1.20
env gin_mode=release

workdir /app

# download go modules
copy go.mod go.sum ./
run go mod download


copy . .

# build
run  go build -o /docker-api

expose 8080

# run
cmd ["/docker-api"]

Jadi saya cuba menjalankannya menggunakan docker run dalam google cloud cli dan nampaknya berjalan dengan baik:

docker run -p 8080:8080  gcr.io/matharc/math-arc-api
[gin-debug] [warning] creating an engine instance with the logger and recovery middleware already attached.

[gin-debug] [warning] running in "debug" mode. switch to "release" mode in production.
 - using env:   export gin_mode=release
 - using code:  gin.setmode(gin.releasemode)

[gin-debug] get    /api/health               --> matharc.com/m/handlers.healthcheckhandler.func1 (3 handlers)
[gin-debug] post   /questions                --> matharc.com/m/handlers.createquestionhandler.func1 (3 handlers)
[gin-debug] get    /questions/:level         --> matharc.com/m/handlers.getallquestionhandler.func1 (3 handlers)
[gin-debug] [warning] you trusted all proxies, this is not safe. we recommend you to set a value.
please check https://pkg.go.dev/github.com/gin-gonic/gin#readme-don-t-trust-all-proxies for details.
[gin-debug] listening and serving http on localhost:8080

Tetapi apabila saya cuba pratonton pada port 8080, saya tidak dapat mengaksesnya:

Saya cuba mengaturnya dalam cloud run tetapi tidak menghairankan, ia tidak berjaya. Saya dapat:

STARTUP HTTP probe failed 1 time consecutively for container "math-arc-api-1" on path "/api/health". The instance was not started.

Apa salah saya?

Penyelesaian

Jadi jawapan @Hans Kilian dalam komen adalah betul. Masalahnya ialah kerana saya menggunakan localhost dan bukannya 0.0.0.0。我以为我已经在代码中将其更改为 0.0.0.0 tetapi nampaknya saya membuat beberapa kesilapan semasa membinanya.

Atas ialah kandungan terperinci Mengapa tidak boleh mengakses port 8080 dalam docker. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam