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.
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?
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!