Inhaltsverzeichnis
Frageninhalt
Heim Backend-Entwicklung Golang Mit Docker-Compose kann nicht auf die Go-REST-API zugegriffen werden

Mit Docker-Compose kann nicht auf die Go-REST-API zugegriffen werden

Feb 13, 2024 pm 02:33 PM

使用 docker-compose 无法访问 Go REST API

php-Editor Yuzai stellte fest, dass viele Entwickler bei der Verwendung von Docker-Compose auf ein häufiges Problem stießen, nämlich dass sie nicht auf die Go-REST-API zugreifen konnten. Dieses Problem kann Entwickler daran hindern, APIs ordnungsgemäß zu testen und zu debuggen. In diesem Artikel werden wir einige Methoden und Techniken zur Lösung dieses Problems vorstellen, um Entwicklern dabei zu helfen, Docker-Compose erfolgreich für den Zugriff auf die Go-REST-API zu verwenden und die Entwicklungseffizienz zu verbessern.

Frageninhalt

Ich versuche, eine einfache Go-Rest-API mit Gin Gonic und MySQL sowie PHPMyAdmin und Docker auszuführen.

Obwohl phpmyadmin einwandfrei läuft, erhalte ich beim Versuch, auf meine Go-API zuzugreifen, die folgende Fehlermeldung: localhost 未发送任何数据。 err_empty_response

Wenn ich die main.go-Datei ohne Docker ausführe, funktioniert alles wie erwartet

Das ist meine docker-composeDatei

version: '3'
services:
  app:
    container_name: full_app
    build: .
    ports:
      - 8080:8080
    expose:
      - 8080
    restart: on-failure
    environment:
      - pma_host=fullstack-mysql
      - db_name=${db_name}
      - db_user=${db_user}
      - db_password=${db_port}
    volumes:
      - .:/usr/src/app/
    depends_on:
      - fullstack-mysql
    networks:
      - fullstack

  fullstack-mysql:
    image: mysql:5.7
    container_name: full_db_mysql
    ports:
      - 3306:3306
    environment:
      - mysql_root_host=${db_host}
      - mysql_user=${db_user}
      - mysql_root_user=${db_root_user}
      - mysql_password=${db_password}
      - mysql_root_password=${db_root_password}
      - mysql_database=${db_name}
      - mysql_root_password=${db_password}
    volumes:
      - database_mysql:/var/lib/mysql
    networks:
      - fullstack

  phpmyadmin:
    image: phpmyadmin/phpmyadmin
    container_name: phpmyadmin_container
    depends_on:
      - fullstack-mysql
    environment:
      - pma_host=fullstack-mysql
      - pma_user=${db_user}
      - pma_port=${db_port}
      - pma_password=${db_password}
    ports:
      - 9090:80
    restart: always
    networks:
      - fullstack

volumes:
  api:
  database_mysql:

# networks to be created to facilitate communication between containers
networks:
  fullstack:
    driver: bridge
Nach dem Login kopieren

Das ist meins dockerfile:

# start from golang base image
from golang:alpine as builder

# env go111module=on

# install git.
# git is required for fetching the dependencies.
run apk update && apk add --no-cache git

# set the current working directory inside the container
workdir /app

# copy go mod and sum files
copy go.mod go.sum ./

# download all dependencies. dependencies will be cached if the go.mod and the go.sum files are not changed
run go mod download

# copy the source from the current directory to the working directory inside the container
copy . .

# build the go app
run cgo_enabled=0 goos=linux go build -a -installsuffix cgo -o main .

# start a new stage from scratch
from alpine:latest
run apk --no-cache add ca-certificates

workdir /root/

# copy the pre-built binary file from the previous stage. observe we also copied the .env file
copy --from=builder /app/main .
copy --from=builder /app/.env .

# expose port 8080 to the outside world
expose 8080

#command to run the executable
cmd ["./main"]
Nach dem Login kopieren

Das ist meine Go-Datei main.go (derzeit):

package main

import (
    "github.com/gin-gonic/gin"
    "log"
    "net/http"
)

func main() {
    router := gin.Default()

    router.GET("/", func(context *gin.Context) {
        context.JSON(http.StatusOK, gin.H{"data": "Hello World !"})
    })

    router.Run("localhost:8080")
}
Nach dem Login kopieren

Wenn ich http://localhost:9090 besuche, wird phpmyadmin geladen (genau das, was ich erwarte) Wenn ich http://localhost:8080 我收到此错误消息:localhost 未发送任何数据。 err_empty_response besuche, erhalte ich diese Fehlermeldung:

docker-compose up --buildIch renne

dafür. Ich mache offensichtlich etwas falsch, bin mir aber nicht sicher, was.

Problemumgehung

main.goDas Problem scheint in Ihrem Go-Code und der Art und Weise zu liegen, wie ich den Überwachungshost für die API spezifiziere. In meiner

-Datei habe ich derzeit den Host auf „localhost:8080“ eingestellt, aber wenn ich meine Anwendung in einem Docker-Container ausführe, sollte ich auf „0.0.0.0:8080“ lauschen. Dadurch kann der Container an alle Netzwerkschnittstellen gebunden werden.

main.go 文件中的 router.runUm dieses Problem zu beheben, musste ich die Zeile router.run in der

-Datei wie folgt ändern:

router.Run("0.0.0.0:8080")
Nach dem Login kopieren
http://localhost:8080Nachdem ich diese Änderung vorgenommen hatte, habe ich das Docker-Image neu erstellt und docker-compose up --build verwendet, um den Container erneut auszuführen. Dies sollte den Zugriff auf meine Go-Rest-API auf außerhalb des Docker-Containers ermöglichen.

localhostHinweis:

im Container bezieht sich auf den Container selbst, nicht auf den Host. Durch die Verwendung von „0.0.0.0“ weise ich den Container an, sich an alle verfügbaren Netzwerkschnittstellen zu binden, sodass ich vom Host-Computer aus auf die API zugreifen kann. 🎜

Das obige ist der detaillierte Inhalt vonMit Docker-Compose kann nicht auf die Go-REST-API zugegriffen werden. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Was sind die Schwachstellen von Debian Openensl Was sind die Schwachstellen von Debian Openensl Apr 02, 2025 am 07:30 AM

OpenSSL bietet als Open -Source -Bibliothek, die in der sicheren Kommunikation weit verbreitet sind, Verschlüsselungsalgorithmen, Tasten und Zertifikatverwaltungsfunktionen. In seiner historischen Version sind jedoch einige Sicherheitslücken bekannt, von denen einige äußerst schädlich sind. Dieser Artikel konzentriert sich auf gemeinsame Schwachstellen und Antwortmaßnahmen für OpenSSL in Debian -Systemen. DebianopensL Bekannte Schwachstellen: OpenSSL hat mehrere schwerwiegende Schwachstellen erlebt, wie z. Ein Angreifer kann diese Sicherheitsanfälligkeit für nicht autorisierte Lesen sensibler Informationen auf dem Server verwenden, einschließlich Verschlüsselungsschlüssel usw.

Welche Bibliotheken werden für die Operationen der schwimmenden Punktzahl in Go verwendet? Welche Bibliotheken werden für die Operationen der schwimmenden Punktzahl in Go verwendet? Apr 02, 2025 pm 02:06 PM

In der Bibliothek, die für den Betrieb der Schwimmpunktnummer in der GO-Sprache verwendet wird, wird die Genauigkeit sichergestellt, wie die Genauigkeit ...

Was ist das Problem mit Warteschlangen -Thread in Go's Crawler Colly? Was ist das Problem mit Warteschlangen -Thread in Go's Crawler Colly? Apr 02, 2025 pm 02:09 PM

Das Problem der Warteschlange Threading In Go Crawler Colly untersucht das Problem der Verwendung der Colly Crawler Library in Go -Sprache. Entwickler stoßen häufig auf Probleme mit Threads und Anfordern von Warteschlangen. � ...

Ist es vielversprechender, Java oder Golang von Front-End zu Back-End-Entwicklung zu verwandeln? Ist es vielversprechender, Java oder Golang von Front-End zu Back-End-Entwicklung zu verwandeln? Apr 02, 2025 am 09:12 AM

Backend Learning Path: Die Erkundungsreise von Front-End zu Back-End als Back-End-Anfänger, der sich von der Front-End-Entwicklung verwandelt, Sie haben bereits die Grundlage von Nodejs, ...

Warum hat das Drucken von Saiten mit Println und String () -Funktionen unterschiedliche Effekte? Warum hat das Drucken von Saiten mit Println und String () -Funktionen unterschiedliche Effekte? Apr 02, 2025 pm 02:03 PM

Der Unterschied zwischen Stringdruck in GO -Sprache: Der Unterschied in der Wirkung der Verwendung von Println und String () ist in Go ...

PostgreSQL -Überwachungsmethode unter Debian PostgreSQL -Überwachungsmethode unter Debian Apr 02, 2025 am 07:27 AM

In diesem Artikel werden eine Vielzahl von Methoden und Tools eingeführt, um PostgreSQL -Datenbanken im Debian -System zu überwachen, um die Datenbankleistung vollständig zu erfassen. 1. verwenden Sie PostgreSQL, um die Überwachungsansicht zu erstellen. PostgreSQL selbst bietet mehrere Ansichten für die Überwachung von Datenbankaktivitäten: PG_STAT_ACTIVITY: Zeigt Datenbankaktivitäten in Echtzeit an, einschließlich Verbindungen, Abfragen, Transaktionen und anderen Informationen. PG_STAT_REPLIKATION: Monitore Replikationsstatus, insbesondere für Stream -Replikationscluster. PG_STAT_DATABASE: Bietet Datenbankstatistiken wie Datenbankgröße, Transaktionsausschüsse/Rollback -Zeiten und andere Schlüsselindikatoren. 2. Verwenden Sie das Log -Analyse -Tool PGBADG

Wie gibt ich die mit dem Modell in Beego Orm zugeordnete Datenbank an? Wie gibt ich die mit dem Modell in Beego Orm zugeordnete Datenbank an? Apr 02, 2025 pm 03:54 PM

Wie kann man im Beegoorm -Framework die mit dem Modell zugeordnete Datenbank angeben? In vielen BeEGO -Projekten müssen mehrere Datenbanken gleichzeitig betrieben werden. Bei Verwendung von BeEGO ...

Wie löste ich das Problem des Typs des user_id -Typs bei der Verwendung von Redis -Stream, um Nachrichtenwarteschlangen in GO -Sprache zu implementieren? Wie löste ich das Problem des Typs des user_id -Typs bei der Verwendung von Redis -Stream, um Nachrichtenwarteschlangen in GO -Sprache zu implementieren? Apr 02, 2025 pm 04:54 PM

Das Problem der Verwendung von RETISTREAM zur Implementierung von Nachrichtenwarteschlangen in der GO -Sprache besteht darin, die Go -Sprache und Redis zu verwenden ...

See all articles