Maison  >  Article  >  développement back-end  >  le conteneur Docker sélectionne un réseau différent même s'il n'a jamais configuré de réseau

le conteneur Docker sélectionne un réseau différent même s'il n'a jamais configuré de réseau

PHPz
PHPzavant
2024-02-09 11:51:17535parcourir

le conteneur Docker sélectionne un réseau différent même sil na jamais configuré de réseau

Dans Docker, nous pouvons fournir une connectivité réseau au conteneur en sélectionnant différents réseaux. Étonnamment, Docker attribue toujours un réseau par défaut au conteneur même si nous n'avons jamais défini explicitement de réseau. Ce problème dérange de nombreux développeurs car ils peuvent rencontrer certains problèmes liés à la configuration du réseau. Dans cet article, nous expliquerons en détail pourquoi les conteneurs Docker ont des réseaux par défaut et comment choisir entre différents réseaux à l'aide de l'éditeur PHP Youzi.

Contenu de la question

J'ai du mal à configurer la configuration du docker pour le service go. Ci-dessous un aperçu de ma configuration

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",
    ],
)

J'ai un graphql playgroud (http) fonctionnant sur http://localhost:8080 et bien que le port soit censé être public, je ne peux pas accéder à l'interface utilisateur du terrain de jeu.

Ce que je veux faire, c'est :

  1. Possibilité d'accéder au terrain de jeu graphql et à toute autre API exécutée sur d'autres ports au sein du conteneur
  2. Pouvoir faire des requêtes pour séparer les conteneurs mysql de mon application go dockerisée (je ne sais pas comment les mettre sur le même réseau que rules_docker).
  3. docker exec -it ... /bin/bash dans mon conteneur Docker (cela ne fonctionne pas car bash n'est pas installé, mais je ne sais pas comment installer bash via cette commande containers_image) L'erreur est la suivante :
oci runtime exec failed: exec failed: unable to start container process: exec: "bash": executable file not found in $path: unknown

Si j'obtiens l'identifiant de l'image Docker généré et que je l'exécute docker run -p 8080:8080 image_id Je peux accéder au terrain de jeu graphql mais je ne peux pas communiquer avec le conteneur MySQL

Si je change de réseau comme suit : docker run --network=host -p 8080:8080 image_id dockerized go 应用程序可以成功与 mysql 容器通信,但随后 graphql playground 变得无法访问。仅当我维护 --network=bridge 时,graphql 游乐场才可访问。我不确定为什么 mysql 也不使用 bridge parce que je ne précise jamais le réseau au démarrage. C'est ainsi que j'ai obtenu le conteneur MySQL

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

Solution

La réponse est ici : Impossible de se connecter au serveur MySQL à l'aide de Go et Docker - Dialup TCP 127.0.0.1:3306 : connexion : connexion refusée

Il s'avère que je dois réellement accéder à MySQL en utilisant l'adresse suivante car Docker sur Mac utilise une machine virtuelle Linux :

docker.for.mac.localhost:3306

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer