11
votes

Exposez le port de conteneur Docker vers une autre machine

J'ai installé Redis dans Docker à l'aide de la commande ci-dessous xxx

maintenant, j'ai besoin d'accéder à cette instance REDIS à partir d'une autre machine xxx

mon L'application est hébergée sur une autre machine sur un serveur différent.

Wnen Je cours l'application, ci-dessous est l'exception

Il n'était pas possible de se connecter au ou les serveurs de Redis; créer un Multiplexeur déconnecté, désactivez AbortonConnectFail. SocketFailure sur Ping

Y a-t-il quelque chose à changer dans la machine virtuelle Docker ou Oracle?


9 commentaires

Docker doit ouvrir les ports comme prévu, que se passe-t-il si vous essayez de vous connecter via ReDIS-CLI de l'autre machine?


En plus de tester la connexion de la CLI sur l'hôte localement, y a-t-il des pare-feu ou d'autres restrictions de connectivité entre les deux hôtes?


Je vérifie l'IP de la machine où Docker est installé, cela fonctionne si je donne 127.0.0.1, mais pas avec l'adresse IP


Vérifiez la prise ouverte pour ce conteneur dans l'hôte principal: NetStat -NA | Grep 6379 && NetStat -na | Grep 6380


$ netstat -na -na | Grep 6379 && NetStat -na | Grep 6380 TCP 127.0.0.1:6379 0.0.0.0:0 Écouter


@Prithvi: Docker et App qui se connecte à Redis sont tous dans la machine virtuelle Oracle? ou une application qui se connecte à ReDIS est en dehors de la machine virtuelle Oracle?


Quelle est la valeur que vous utilisez à la place de iPofDockerInstalledmachine ? Votre localhost?


@kgs Redis in Docker est dans Oracle VM "Par défaut". L'application est dans la machine locale.


@Prithvi: a ajouté ma réponse. Voir si cela aide.


6 Réponses :


1
votes

Docker lie vos ports exposés à localhost. C'est pourquoi vous trouvez des problèmes. Afin de faire des docker engourdi ces ports exposés à localhost, vous devez exécuter les conteneurs via la modification de la commande que vous utilisez pour lancer les conteneurs: xxx

la partie qui a changé est que vous spécifiez maintenant que vous spécifiez les deux un hôte et un port pour la partie locale (et laissant la partie conteneur comme c'était; un seul port).

J'espère que cela vous aide à vous montez! Et s'il vous plaît, faites attention à cela. Ce n'est pas comme si quelque chose que vous voudriez généralement atteindre. Assurez-vous de ne pas laisser votre service ReDIS non authentifié si vous utilisez ceci pour quelque chose, même près de la production.


0 commentaires

1
votes

Compte tenu de votre commande d'exécution sans aucune restriction IP dans: xxx pré>

et la sortie NetStat qui le montre liée à localhost dans le commentaire: P>

$ netstat -na | grep 6379 && netstat -na | grep 6380 
TCP 127.0.0.1:6379 0.0.0.0:0 LISTENING


5 commentaires

J'ai recréé la machine par défaut Docker Run -D -P 0.0.0.0:6380:6379 Redis: 2.8.20 Docker Run -d -P 0.0.0.0:6379:6379 Redis: 3.0.1 Toujours je suis matrice à NetStat -na | Grep 6379 && NetStat -na | Grep 6380 TCP 127.0.0.1:6379 0.0.0.0:0 Écouter Faites-moi savoir si je fais quelque chose de mal


netstat -a | Grep 6379 TCP 127.0.0.1:6379 My-Sys-460: 0 Écouter


La réponse ci-dessus a énuméré assez quelques étapes pour résoudre la question. Avez-vous tous vérifié tous? Recréer le conteneur avec votre commande n'a pas été répertorié car il ne devrait pas résoudre votre problème.


Pour la 1ère chèque. netstat -lntp | grep 6379. J'utilise Windows. Cela ne semble pas être une commande. Cela me donne un résultat de la commande d'aide


@Prithvi En premier, vérifiez la connectivité entre les deux serveurs avec NETCAT .Inez le serveur exécutant REDIS, arrêtez les dockers et lancez nc -l 6379 pour écouter sur le port ReDIS. Sur l'autre serveur, essayez d'accéder au port d'écoute NC -V Serverip 6379 . Si la connexion est réussie, vous verrez un message: "NCAT: connecté à Serverip: 6379". Si ce n'est pas un pare-feu, ou quelque chose bloque la connexion.



1
votes

En fonction de votre erreur;

Il n'a pas été possible de se connecter au serveur (Redis s); pour créer un> multiplexeur déconnecté, désactiver AbortOnConnectFail. SocketFailure sur PING

Je pense que votre autre machine ne peut pas accéder à la machine avec des conteneurs docker.

  1. Essayez ping IPOFDOCKERMACHINE .
  2. Si l'étape 1 ne fonctionne pas, cela signifie que vous ne pouvez pas accéder à la machine avec des conteneurs docker de votre autre machine. Vous devez corriger cette première.
  3. Si l'étape 1 est commande telnet try réussie pour vous assurer que vous pouvez accéder aux ports ont besoin. S'il vous plaît consulter cet article sur commande telnet. Cet article montre comment activer telnet dans Windows OS. telnet IPOFDOCKERMACHINE 6380 telnet IPOFDOCKERMACHINE 6379

  4. Si telnet échoue, cela signifie que vous n'avez pas accès aux ports dont vous avez besoin. Vous devez corriger ce problème avant d'avancer.

  5. Si l'étape 3 est réussie, vous devez vous assurer que vos conteneurs docker sont lancés comme David Gonzalez a montré en sa réponse ci-dessus.

0 commentaires

3
votes

Connexion de plusieurs conteneurs sur le réseau sur différents serveurs est un cas d'utilisation parfait pour Swarm Docker a>. Vous devriez essayer de créer un réseau de superposition et de connecter les conteneurs exécutants à l'essaim et de ce réseau, comme décrit ici . En fonction de vos connaissances de l'écosystème d'essaim, vous pouvez essayer différentes solutions.

Commencer avec Docker 1.12, et si vous souhaitez gérer manuellement les conteneurs, vous pouvez exécuter P>

$ docker service create --network redisnet \
                        --name redis --replicas 1 redis:3.0.1
$ docker service create --network redisnet \
                        --name old_redis --replicas 1 redis:2.8.20
$ docker service create --network redisnet --name app <APP_IMAGE>


0 commentaires

0
votes

@prithvi: on dirait que vous n'êtes pas en mesure d'accéder à Redis de la machine locale. Avez-vous essayé de transfert de port dans les paramètres de la machine virtuelle Oracle

 Entrez la description de l'image ici

 Entrez la description de l'image ici

De cette façon, vous pouvez accéder à l'application exécutée dans Oracle à VM à accéder à partir de votre ordinateur local.


0 commentaires

0
votes

Exposer le conteneur est très important pour l'hôte d'identifier dans lequel le conteneur de port est exécuté. -P dans la commande Docker Exécuter utilisée pour exposer les ports. Syntaxe: Docker Run -p host_ip: host_port: conteneur_port image_name (Ajouter l'hôte_ip à votre exécution) Docker Run -D -P Host_ip: 6379: 6379 Redis: 3.0.1 Ceci lie le port 6379 du conteneur vers le port 6379 sur Host_IP de la machine hôte. Utilisez iptables pour la clarification: IPTABL -L -L -T NAT Supposons que le conteneur IP soit: 172.17.0.2 Maintenant, la demande Envoyer à Host_IP et Port (6379) est redirecte au conteneur avec IP (172.17.0.2) et Port (6379).


0 commentaires