1
votes

Connexion de Redis localhost à partir de Docker

J'ai une application Node.js où j'utilise Redis, j'essaie de connecter le conteneur Docker et le Redis fonctionnant localement.

Solutions essayées:

  1. vim /usr/local/etc/redis.conf

    Mis à jour

    Error: Redis connection to localhost:6379 failed - connect ECONNREFUSED 127.0.0.1:6379
    

    À

    bind 0.0.0.0
    

    J'ai arrêté le redis et le redémarrer et j'ai essayé d'exécuter le docker

  2. Avec ce qui précède, j'ai essayé d'exécuter docker run -p 4000: 8080 -p 6379: 6379 -t node-app

Les deux ci-dessus n'ont pas fonctionné en obtenant l'erreur ci-dessous

bind 127.0.0.1

Mise à jour: je la vérifie sur Mac.


5 commentaires

Est-ce que cela répond à votre question? Depuis l'intérieur d'un conteneur Docker, comment puis-je me connecter à l'hôte local de la machine?


docker run -p 8080: 8080 -p 6379: 6379 --network = "bridge" -t node-app obtenant cette erreur Erreur lors du démarrage de listen tcp 0.0.0.0:6379: bind: adresse déjà utilisée.


docker run -p 8080: 8080 -p 6379: 6379 --network = "host" -t capacity-node cela donne la même erreur Erreur: Redis connexion à localhost: 6379 a échoué - connectez ECONNREFUSED 127.0.0.1:6379


Liez l'instance redis à localhost au lieu de 0.0.0.0 . Vérifiez que vous pouvez vous connecter de l'hôte docker à redis avant de commencer à travailler avec docker. Ensuite, arrêtez et rm tous les conteneurs en cours d'exécution de node-app . Enfin, démarrez le conteneur docker docker run --network = "host" -t node-app . Cela devrait marcher. Notez qu'il n'est pas nécessaire de spécifier les ports exposés car avec l'hôte en mode réseau, tous les ports exposés du conteneur sont automatiquement exposés à l'hôte du docker.


"docker.for.mac.localhost" au lieu de localhost ou '127.0.0.1' fonctionnera :), cela a fonctionné pour moi


3 Réponses :


0
votes

"docker.for.mac.localhost" au lieu de localhost ou '127.0.0.1' fonctionnera :), cela a fonctionné pour moi sur une machine mac.


3 commentaires

Mac n'est pas mentionné dans la question.


Je n'ai pas étiqueté la plate-forme comme mac, désolé pour cela. a ajouté les informations de la plateforme sur la question. Merci @mfnx


Pourquoi ne pas simplement accéder à votre hôte local via l'interface réseau de Docker0? À partir du conteneur, l'ip 172.17.0.1 doit pointer vers l'hôte local de votre machine.



2
votes

Si vous utilisez le réseau par défaut ( --network = "bridge" ), vous pouvez simplement utiliser l'adresse IP de la passerelle entre l'hôte Docker et le réseau pont, c'est-à-dire 172.17. 0,1 . Voici la documentation. Cela fonctionnerait sur toutes les plates-formes, pas seulement sur un Mac.


0 commentaires

0
votes

Dans Dockerfile, ajoutez ceci Docker v19.03

const REDIS_HOST = process.env.REDIS_HOST ? process.env.REDIS_HOST : ""
const client = redis.createClient(REDIS_HOST)

lorsque je l'utilise sur node.js

ENV REDIS_HOST "redis://host.docker.internal"


0 commentaires