2016-12-29 12 views
8

Ich sehe viele Leute kämpfen mit dieser Art von Gefühl, wie vielleicht gibt es einen Bug in der Redis Container-Bild, und andere scheinen ein ähnliches Problem zu jagen.Verbinden mit Redis läuft in Docker Container von Host-Maschine

Ich verwende das Standard-Redis-Image auf DockerHub. (https://github.com/dockerfile/redis)

es wie folgt ausgeführt werden:

docker run -it -p 6379:6379 redis bash 

Sobald ich bin in ich den Server starten können, und machen Sie einen redis Ping aus dem Behälter Bild.

Leider kann ich keine Verbindung zum Redis-Container von meinem Host herstellen.

Ich habe versucht Einstellung, wie unten.

bind 127.0.0.1 

und entfernt die bind aus der Konfiguration

und versuchte, geschützten Modus deaktivieren

protected-mode no 

Ich weiß, dass es die Konfigurationsdatei liest, da ich Ports geändert nur zu testen, und ich war dazu in der Lage.

Ich verwende Windows 10, vielleicht ist es ein Windows-Netzwerkproblem. Ich habe nie ein Problem mit Docker normalerweise. Ich bin verwirrt

+0

Wie versuchen Sie, eine Verbindung herzustellen Redis Container? Versuchen Sie, auf bash innerhalb des redis Containers zuzugreifen oder versuchen, eine Verbindung zum redis container über 6379 port herzustellen? –

Antwort

3

Das Problem mit Ihrem binden, sollen Sie die folgenden Werte gesetzt:

bind 0.0.0.0 

Dies wird redis Set mit einer Schnittstelle in einer Containerumgebung für alle Schnittstellen zur Verfügung, zu binden, (eth0) und eine Loopback (lo) Redis wird an beide der oben genannten binden. Sie sollten Sicherheitsmaßnahmen über andere Anweisungen in config file hinzufügen oder externe Tools wie firewalls verwenden. Denn mit diesem Ansatz kann sich jeder mit Ihrem redis Server verbinden.

Die Standardeinstellung ist bind 127.0.0.1 und diese Einstellung bewirkt, dass redis nur auf die Loopback-Schnittstelle wartet und nur von innerhalb des Containers zugänglich ist. (Aus Sicherheitsgründen)

Um redis mit benutzerdefinierter Konfigurationsdatei ausführen:

sudo docker run -d --name redis-test -p 6379:6379 -v /path/to/redisconf/redis.conf:/redis.conf redis redis-server /redis.conf 

nun auf Docker Host zu überprüfen, mit redis-tools installiert:

sudo redis-cli       
127.0.0.1:6379> 
127.0.0.1:6379> set farhad likes:stackoverflow 
OK 
127.0.0.1:6379> get farhad 
"likes:stackoverflow" 
127.0.0.1:6379> 

Sie können auch zu Ihrem redis Behälter aus einem connnect externer Host über:

redis-cli -h 'IP-address-of-dockerhost-running-redis-container' 
+0

Vielen Dank für Ihre Hilfe, hat mich nicht ganz dahin gebracht. Es scheint, als ob Redis es nicht zu mögen scheint, wenn ich versuche, eine Verbindung von meinem Host-Computer herzustellen, aber ich habe ein zweites Docker-Image hochgespielt und die IP-Adresse des Docker-Image erhalten, und ich konnte eine Verbindung herstellen.Von einem zweiten Docker-Image konnte ich mich folgendermaßen mit dem Redis-Server verbinden: redis-cli -h 172.17.0.2 – user3888307

+0

Sie können sich verbinden, wenn Sie von einem anderen Container aus eine Verbindung herstellen können. Stellen Sie nur sicher, dass Sie "bind 0.0.0.0" in Ihrer benutzerdefinierten Konfiguration haben und "6378" beim Erstellen des Containers verfügbar machen. Vom Docker hos können Sie sich verbinden, indem Sie 'sudo redis-cli' ausführen. Wenn alles schief geht, geben Sie mir Schritt für Schritt, was Sie tun, damit ich das Problem reproduzieren kann. –

+0

Danke Farhad für Ihre Hilfe. Es scheint etwas mit dem Redis-Image auf dem Docker-Hub zu sein, ich habe Redis auf einem Ubuntu-Server installiert und es hat funktioniert, wie ich es erwartet hätte. Ich werde es nur verwenden, um Redis von meinem lokalen Host zu treffen – user3888307

Verwandte Themen