Maison > développement back-end > Golang > Pourquoi je ne peux pas accéder au port 8080 dans Docker

Pourquoi je ne peux pas accéder au port 8080 dans Docker

WBOY
Libérer: 2024-02-11 18:54:08
avant
954 Les gens l'ont consulté

Pourquoi je ne peux pas accéder au port 8080 dans Docker

L'éditeur php Xigua est là pour répondre à une question courante : pourquoi le langage Go ne peut-il pas accéder au port 8080 dans le conteneur Docker ? Lors de l'utilisation de conteneurs Docker, nous rencontrons souvent le problème de ne pas pouvoir accéder aux ports internes du conteneur. Cela est souvent dû à des problèmes de configuration réseau avec le conteneur Docker. En comprenant le réseau Docker et en nous adaptant en conséquence, nous pouvons résoudre ce problème et permettre au langage Go d'accéder avec succès au port 8080 dans le conteneur Docker. Ci-dessous, j'expliquerai en détail comment résoudre ce problème.

Contenu de la question

Je souhaite donc déployer mon backend simple go dans cloud run. J'utilise gin pour gérer le routage. Ma fonction principale pour gérer cela ressemble à ceci :

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")
}
Copier après la connexion

J'ai essayé de le construire en utilisant Docker et cela a fonctionné. Mon fichier docker ressemble à ceci :

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"]
Copier après la connexion

J'ai donc essayé de l'exécuter en utilisant Docker Run dans Google Cloud cli et cela a semblé fonctionner correctement :

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
Copier après la connexion

Mais lorsque j'essaie de le prévisualiser sur le port 8080, je ne parviens pas à y accéder :

J'ai essayé de le déployer dans Cloud Run mais sans surprise, cela n'a pas fonctionné. J'obtiens :

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

Qu'est-ce que j'ai fait de mal ?

Solution

Donc la réponse de @Hans Kilian dans les commentaires est correcte. Le problème est que j'utilise localhost au lieu de 0.0.0.0。我以为我已经在代码中将其更改为 0.0.0.0 mais il semble que j'ai fait quelques erreurs lors de sa construction.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:stackoverflow.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal