Heim  >  Artikel  >  Backend-Entwicklung  >  Der Docker-Container wählt ein anderes Netzwerk aus, obwohl er nie ein Netzwerk festlegt

Der Docker-Container wählt ein anderes Netzwerk aus, obwohl er nie ein Netzwerk festlegt

PHPz
PHPznach vorne
2024-02-09 11:51:17496Durchsuche

Der Docker-Container wählt ein anderes Netzwerk aus, obwohl er nie ein Netzwerk festlegt

In Docker können wir durch Auswahl verschiedener Netzwerke Netzwerkkonnektivität zum Container bereitstellen. Überraschenderweise weist Docker dem Container immer noch ein Standardnetzwerk zu, obwohl wir nie explizit ein Netzwerk festgelegt haben. Dieses Problem stört viele Entwickler, da sie möglicherweise auf Probleme im Zusammenhang mit der Netzwerkkonfiguration stoßen. In diesem Artikel erklären wir ausführlich, warum Docker-Container über Standardnetzwerke verfügen und wie Sie mithilfe des PHP-Editors Youzi zwischen verschiedenen Netzwerken wählen können.

Frageninhalt

Ich habe Probleme beim Einrichten der Docker-Konfiguration für den Go-Dienst. Nachfolgend finden Sie eine Übersicht über mein Setup

go_binary(
    name = "main_arm64",
    embed = [":server_lib"],
    goarch = "arm64",
    goos = "linux",
    visibility = ["//visibility:public"],
)

container_image(
    name = "ww_server_image",
    base = "@go_image_static_arm64//image",
    entrypoint = ["/main_arm64"],
    files = [":main_arm64"],
    ports = [
        "8080",
        "3306",
    ],
)

Auf mir läuft ein GraphQL Playgroud (http) http://localhost:8080 und obwohl der Port angeblich öffentlich ist, kann ich nicht auf die Playground-Benutzeroberfläche zugreifen.

Was ich tun möchte ist:

  1. Möglichkeit, auf den Graphql-Playground und alle anderen APIs zuzugreifen, die auf anderen Ports innerhalb des Containers ausgeführt werden
  2. Sie können Anfragen stellen, um MySQL-Container von meiner Docker-Go-App zu trennen (ich weiß nicht, wie ich sie in dasselbe Netzwerk wie rules_docker stellen soll).
  3. docker exec -it ... /bin/bash in meinen Docker-Container (das funktioniert nicht, weil Bash nicht installiert ist, aber ich weiß nicht, wie ich Bash über diesen Befehl „container_image“ installieren soll) Der Fehler ist wie folgt:
oci runtime exec failed: exec failed: unable to start container process: exec: "bash": executable file not found in $path: unknown

Wenn ich die generierte Docker-Image-ID erhalte und ausführe docker run -p 8080:8080 image_id, kann ich auf den Graphql-Playground zugreifen, aber nicht mit dem MySQL-Container kommunizieren

Wenn ich das Netzwerk wie folgt ändere: docker run --network=host -p 8080:8080 image_id dockerized go 应用程序可以成功与 mysql 容器通信,但随后 graphql playground 变得无法访问。仅当我维护 --network=bridge 时,graphql 游乐场才可访问。我不确定为什么 mysql 也不使用 bridge weil ich beim Starten nie das Netzwerk angebe. So habe ich den MySQL-Container bekommen

docker run -p 3306:3306 --name my-db -e MYSQL_ROOT_PASSWORD=testing -d mysql:8.0.31

Lösung

Die Antwort ist hier: Verbindung zum MySQL-Server mit Go und Docker nicht möglich – Einwahl-TCP 127.0.0.1:3306: Verbindung: Verbindung abgelehnt

Es stellt sich heraus, dass ich tatsächlich über die folgende Adresse auf MySQL zugreifen muss, da Docker auf dem Mac eine Linux-VM verwendet:

docker.for.mac.localhost:3306

Das obige ist der detaillierte Inhalt vonDer Docker-Container wählt ein anderes Netzwerk aus, obwohl er nie ein Netzwerk festlegt. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen