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:
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
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.
3 Réponses :
"docker.for.mac.localhost"
au lieu de localhost ou '127.0.0.1'
fonctionnera :), cela a fonctionné pour moi sur une machine mac. p>
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.
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.
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"
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 de0.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 denode-app
. Enfin, démarrez le conteneur dockerdocker 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