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

Mengapa tidak boleh mengakses port 8080 dalam docker

WBOY
Lepaskan: 2024-02-11 18:54:08
ke hadapan
955 orang telah melayarinya

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")
}
Salin selepas log masuk

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"]
Salin selepas log masuk

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
Salin selepas log masuk

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.
Salin selepas log masuk

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!

Label berkaitan:
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