2016-09-20 2 views
2

Ich habe diesen (benutzerdefinierten) Container, der ein Java-Programm ausführt, das lokal Mongo erfordert. Jetzt, mit Docker möchte ich Mongo in einem eigenen Container einrichten. Also, ich denke, um diesen 27017 Port lokal in diesem Java-Container verfügbar zu machen, muss ich einen SSH-Tunnel einrichten, richtig? Wenn es einen einfacheren Weg gibt, lass es mich wissen.Expose mongo port in anderen Container

So gibt es dieses offizielle mongo image Bild, aber ich bekomme den Eindruck ssh ist nicht installiert oder läuft. Was wäre der beste Ansatz dafür?

UPDATE: Ich habe die Frage fokussierter auf Port-Weiterleitung umformuliert here

Antwort

2

Sie versuchen in Ihren Container SSH Zugang zu ihm zu gewinnen, aber das ist nicht, wie Sie eine Verbindung herstellen. Docker bietet Funktionen zur sicheren Verbindung über die folgenden Methoden.

Connect in einen laufenden Behälter - Docs:

docker exec -it <container name> bash 
$ [email protected]:/# 
einen Container von Bild Anfang

, und eine Verbindung zu ihm - Docs:

docker run -it <image name> bash 
$ [email protected]:/# 

Hinweis: Wenn es sich um eine Alpine basierend Bild ist Möglicherweise ist Bash nicht installiert. In diesem Fall sollte die Verwendung von sh anstelle von bash in Ihren Befehlen funktionieren. Mongo's Dockerfile sieht aus, debian:jessie zu verwenden, die bash Unterstützung haben wird.

+0

Ich muss den Db-Port dem Java-Container zuordnen, so dass die Java-Anwendung auf die Datenbank zugreifen kann als 'localhost: 27017' –

1

Sie müssen Ihren Container im selben Netzwerk ausführen lassen. Sie müssen nicht in Ihren Mongo- oder App-Container wechseln.

https://docs.docker.com/engine/userguide/networking/

Zuerst definieren ein Netzwerk

docker network create --driver bridge isolated_nw 

Starten Sie Container neu mit, dass

docker run -p 27017:27017 --network=isolated_nw -itd --name=mongo-cont mongo 
docker run --network=isolated_nw -itd --name=app your_image 

Das Bild von Mongo Netzwerk 27017 enthält SETZEN so von Ihrer App Container, sollten Sie sein Zugang zum Mongo - Container mit dem Namen mongo-cont

+0

Die Java-Anwendung greift auf die Datenbank als' localhost: 27017' zu, also denke ich, dass Sie Lösungen nicht tun 't Wok, oder? –

+0

Bearbeitete meine Antwort zu Port – Sylwit

+0

öffnen Auch wie erwähnt können Sie nicht localhost: 27017 verwenden, aber Sie müssen mongo-cont: 27017 – Sylwit

1

Sie können Ihr benutzerdefiniertes Bild auf dem offiziellen mongodb-Bild erstellen, wodurch Sie zusätzliche Pakete installieren können.

FROM mongo:latest 
RUN apt-get install ssh 

auch versuchen docker-compose zu benutzen, um Ihre Container zusammen zu bauen und zu verknüpfen, wird es den Prozess deutlich erleichtern.

version: '2' 
services: 
    mongo: 
    image: mongo:latest 
    ports: 
     - "27017" 

    custom_project: 
    build: 
     context: . # Parent directory address of Dockerfile 
     dockerfile: Dockerfile-Custom # Name of Dockerfile 
    command: /root/docker-entrypoint.sh 

This ist das Bild für MongoDB offizielle Bild verwendet.

Verwandte Themen