SSH Server im Docker Container und Zugriff mit Putty vom Windows PC - wie geht das?

Status
Für weitere Antworten geschlossen.

tp1de

Benutzer
Mitglied seit
13. Jul 2016
Beiträge
17
Punkte für Reaktionen
0
Punkte
1
Hallo, ich habe mehrere Docker Container seit Monaten stabil am laufen.
Nun möchte ich auf einen der Container mich mit Putty per SSH verbinden, anstelle des Terminals.

Ich habe den SSH Server installiert und gestartet.
In /etc/ssh/sshd_config ist "PermitRootLogin yes" eingetragen.

Der SSH-Port ist von aussen erreichbar. Ich kann mich nur nicht einloggen.
Der Container läuft unter dem Benutzer root. Ich kann aber mit passwd kein Passwort setzten und weiss auch nicht unter welchem Kennwort der Container läuft.

Wer kann helfen?

Grüße Thomas
 

haydibe

Benutzer
Sehr erfahren
Mitglied seit
12. Apr 2016
Beiträge
1.477
Punkte für Reaktionen
360
Punkte
103
Kaum ein offizielles Docker Image hat ein SSH-Server an Board - in 99% der Fallen braucht man es nicht!
Ad-hoc fallt mir nur eine sinnvolle Ausnahme ein: wenn ein Git-Server (Gitlab, Gitea, ...) im Container betrieben wird und der Git-Client über ssh mit dem Server kommunizieren soll.

Wenn es um das reine Ausführen von Befehlen geht, dann ist der "Docker Way" auf die Kommandozeile über docker exec zuzugreifen:
1. Mit putty auf sshd von DS zugreifen
2. root-Rechte erlange -> sudo -i
3. Interaktives Terminal im Container öffnen -> docker exec -ti {container id oder name} /bin/sh

Wer den Shell-Zugriff verwenden will, um Änderungen an dem laufenden Container direkt vorzunehmen, der macht höchstwarscheinlich etwas falsch. Docker-Container sind leichtgewichtige Wegwerf-Instanzen(!) der Docker-Images. Änderungen die behalten werden sollen gehören IMMER in das Image und NIE manuell im Container ausgeführt. Docker-Container sind keine VMs...
 

tp1de

Benutzer
Mitglied seit
13. Jul 2016
Beiträge
17
Punkte für Reaktionen
0
Punkte
1
Danke für die Hilfestellung, um per Putty in den Container zu kommen. Funktioniert. Das war für mich neu.

Ich bin noch nicht ganz klar, ob ich bei Docker bleiben, oder zu VMM wechseln soll. VMM kann alles was ich brauche, ist für mich aber ein "schwarzes Loch" was tägliche Datensicherung und Auslagerung auf externe HDD angeht. Meine Hauptanwendung läuft heute auf 2 Docker Container und die Datenbereiche sind auf ein Volume der Diskstation gemounted. Datensicherung dann über Hyper Backup.

Für den Container mit der MySQL Datenbank hätte ich gerne für die MySQL Workbench Zugriff um Parameter der DB per Workbench (SSH) zu verändern.Deshalb die Frage nach dem SSH -Zugriff. Kann ich denn wenn ich per Putty auf die Diskstation komme, dann auch auf die Docker-Datenstruktur zugreifen? Falls ja, wie?
 

haydibe

Benutzer
Sehr erfahren
Mitglied seit
12. Apr 2016
Beiträge
1.477
Punkte für Reaktionen
360
Punkte
103
... um Parameter der DB per Workbench (SSH) zu verändern...
Was für Parametere? Willst Du die my.cnf editieren? Normalerweise gibt es in der Beschreibung der Images Hinweise auf Env-Variablen oder Volumes die gemountet werden können um Einstellungen in den Container zu bekommen.

Der Datenaustausch zwischen Host und Docker-Container geht am einfachsten über volumes. Dabei werden Verzeichnisse oder einzelne Dateien vom Host in den Container eingeblendet. Änderungen auf beiden Seiten sind jeweils sofort auf der anderen sichtbar. Man kann so bspw. eine Datei auf dem Host editieren, den Container neu starten und die Änderungen greifen sofort. Warnung: Alles was nicht in Volumes liegt, geht verloren, wenn der Container gelöscht wird (-> genau das muss man nämlich tun, wenn man ein neueres Image verwenden will).

Das mit MySQL Workbench verstehe ich nicht. Das greift doch über Port 3306 auf die Datenbank zu? Solange Du das Portmapping gemacht hat, sollte das funktionieren.
 

tp1de

Benutzer
Mitglied seit
13. Jul 2016
Beiträge
17
Punkte für Reaktionen
0
Punkte
1
Portzugriff funktioniert natürlich einwandfrei. Ich schreibe ca. 100 Datensätze pro Sekunde und muss bei der Performance eingreifen. Also Performance Monitor und Innodb Parameter verändern und dann DB neustarten. Es gibt einige verschachtelte cnf Files. Wäre also deutlich komfortabler, wenn das über die MySQL WB gehen könnte. Dazu bräuchte ich den SSH Zugriff auf die cnf Files. Da das nicht geht, muss ich dann auch die Konfigurationsdaten auf ein diskstation volume mappen.
 

haydibe

Benutzer
Sehr erfahren
Mitglied seit
12. Apr 2016
Beiträge
1.477
Punkte für Reaktionen
360
Punkte
103
Ah okay, verstehe.

Ist der Pfad für die cnf-Datei fest vorgegeben oder kann man den selber wählen?
Denn dann sollte man doch via ssh auf die Datei auf der Diskstation zugreifen können, die dann natürlich als Volume in den Container gemapped sein sollte.

Auf Netzwerkebene kann man zusätzlich Performance rausholen, indem man Network=host verwendet statt Network=bridged. Bei Ersterem wird direkt das Netzwerkinterface der DS mitverwendet. Das klappt natürlich nur, wenn alle vom Container benötigten Ports auf der DS auch verfügbar sind.
 

tp1de

Benutzer
Mitglied seit
13. Jul 2016
Beiträge
17
Punkte für Reaktionen
0
Punkte
1
Es gibt bei MySQL eine verschachtelte Struktur von cnf-files in unterschiedlichen Verzeichnissen. Die Speicherorte sind natürlich über das mysql Docker Image vorgegeben. Wie ich das ggfs. beeinflussen kann muss ich noch herausfinden.

Ich mache mir aber aktuell Gedanken, ob ich bei Docker bleiben oder zum Virtual Machine Manager wechseln soll. Ich habe aktuell 4 Docker Container am laufen, alle mit Network=host.
3 davon bilden eine Gesamt-Applikation im IoT-Umfeld (ioBroker):

1. ioBroker Container - Daten der Applikation auf Volume gemapped
2. MySQL 5.7 Container - Daten der Applikation (Datenbanken) auf Volume gemapped
3. Redis Container - In Memmory Datenbank für (1) zur Reduzierung der File-IO's

Funktioniert soweit gut und absolut stabil und ich habe auch bereits ohne Probleme auf neue Versionen der Container upgedated.
Die Kommunikation zwischen den Containern läuft mit der Diskstation IP und unterschiedlichen Ports.

Alternativ habe ich zum Test unter VMM eine Virtuelle Maschine (Debian Lite Server) aufgesetzt und alle Applikationen dort integriert.
Auch das läuft einwandfrei. Aber eine Volume Mapping funktioniert nur mit NFS. Ich frage mich aber, ob das performant genug ist.
Nur so könnte ich die Applikations- und MySQL-Daten weiterhin mit Hyper Backup sichern.

Hast Du dazu eine Meinung?
 

haydibe

Benutzer
Sehr erfahren
Mitglied seit
12. Apr 2016
Beiträge
1.477
Punkte für Reaktionen
360
Punkte
103
Ist der Pfad für die cnf-Datei fest vorgegeben oder kann man den selber wählen?
Da habe ich mich unglücklich ausgedrückt: gemeint war der Zugriff von MySQL Workbench auf cnf-Dateien über SSH.

Eine Volume kann im einfachsten Fall das Binding von einem lokalen Verzeichnis in ein Container-Verzeichnis sein. Technisch ist es ein "mount --bind"

NFS verwendet man eignelich nur in Verbindung mit Named Volumes, die vor und nach dem Erzeugen/Zerstören eines Containers existieren. Ungewöhnliche Anforderung für die Syno-Docker-Nutzung.

Im wahren Leben kommt sowas eingentlich nur zum Einsatz, wenn es Richtung Docker-Swarm geht. Schließlich kann ein Container dort auf irgendeinem Knoten hochkommen. Wenn die Daten eines Named Volume dann nicht auf nem Fileshare liegen würde, wäre das ein ziemliches Problem.

Prinzipiel würde ich Docker Images/Container immer einer VM vorziehen. Der Overhead ist einfach deutlich geringer. Durch die Volumes ist genau klar, welche Daten wo liegen.
 
Zuletzt bearbeitet:
Status
Für weitere Antworten geschlossen.
 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat