Machine: 【Behoben】 Wie kann Docker-Maschine einen vorhandenen Docker-Host hinzufügen?

Erstellt am 21. März 2016  ·  63Kommentare  ·  Quelle: docker/machine

Es ist ein altes Problem, aber ich kann die nützliche Antwort nicht finden.

Ich habe die folgende Umgebung:
Name des lokalen Hosts (mein Laptop): Chris-Laptop
Docker-Maschine ist bereits installiert, Version 0.6.0, Build e27fb87, Mac OS X 10.11
Name des Remote-Hosts (Mein VPS): li845-130 (139.162.3.130)
Docker-Engine ist bereits installiert, CentOS 7.0

1.Docker-Daemon-Prozess auf dem Remote-Host
[ root @ li845-130 ~] # ps -ef | grep docker |
root 12093 1 0 02:09? 00:00:00 / usr / bin / docker-Daemon -H tcp: //0.0.0.0 : 2376

2.Konfigurieren Sie die SSH-Verbindung ohne Passwort
[ tdy218 @ Chris-Laptop .ssh] $ ssh [email protected]
Letzte fehlgeschlagene Anmeldung: Mon Mar 21 02:54:06 UTC 2016 von 125.88.177.95 auf ssh: notty
Seit der letzten erfolgreichen Anmeldung sind 54 Anmeldeversuche fehlgeschlagen.
Letzter Login: Mon Mar 21 02:25:25 2016 von 114.248.235.223
[ root @ li845-130 ~] #

3. Fügen Sie lokalen Docker-Computern einen Remote-Docker-Host hinzu
[ tdy218 @ Chris-Laptop .ssh] $ docker -machine create --driver none -url = tcp: //139.162.3.130 : 2376 linodevps
Vorab-Erstellungsprüfungen ausführen ...
Maschine erstellen ...
Führen Sie Folgendes aus, um zu sehen, wie Sie Ihren Docker-Client mit der Docker Engine verbinden, die auf dieser virtuellen Maschine ausgeführt wird: docker-machine env linodevps
[ tdy218 @ Chris-Laptop .ssh] $ docker -machine ls
NAME ACTIVE DRIVER STATE URL SWARM DOCKER FEHLER
Standard * Virtualbox Ausführen von TCP :
linodevps - none Running tcp: //139.162.3.130 : 2376 Unknown Docker-Version kann nicht abgefragt werden: TLS-Konfiguration kann nicht gelesen werden: open /Users/tdy218/.docker/machine/machines/linodevps/server.pem: Keine solche Datei oder kein solches Verzeichnis
[ tdy218 @ Chris-Laptop .ssh] $
[ tdy218 @ Chris-Laptop .ssh] $ docker -machine -D regenerate-certs linodevps
Docker Machine Version: 0.6.0, Build e27fb87
TLS-Maschinenzertifikate neu generieren? Warnung: Dies ist irreversibel. (j / n): y
TLS-Zertifikate neu generieren
Binärer Pfad unter / usr / local / bin / docker-machine gefunden
Plugin-Server für Treiber keine starten
Plugin-Server, der die Adresse 127.0.0.1:54648 abhört
() Aufruf von .GetVersion
Verwenden von API Version 1
() Aufrufen von .SetConfigRaw
() Aufrufen von .GetMachineName
command = configureAuth machine = linodevps
Warten auf die Verfügbarkeit von SSH ...
Aufrufen der WaitForSSH-Funktion ...
(linodevps) Aufruf von .GetSSHHostname
(linodevps) Aufruf von .GetSSHPort
(linodevps) Aufruf von .GetSSHKeyPath
(linodevps) Aufruf von .GetSSHUsername
Verwenden des SSH-Clienttyps: extern
{[-o BatchMode = yes -o PasswordAuthentication = no -o StrictHostKeyChecking = no -o UserKnownHostsFile = / dev / null -o LogLevel = quiet -o ConnectionAttempts = 3 -o ConnectTimeout = 10 -o ControlMaster = no -o ControlPath = none @ -p 0] / usr / bin / ssh}
So führen Sie den SSH-Befehl aus:
Ausfahrt 0
SSH cmd err, Ausgabe: Exit-Status 255: Verwendung: ssh [-1246AaCfGgKkMNnqsTtVvXxYy] [-b
..................

Fehler beim Abrufen des SSH-Befehls 'exit 0': Beim Ausführen eines SSH-Befehls ist ein Fehler aufgetreten!
Befehl: Beenden Sie 0
err: Status 255 beenden
Ausgabe: Verwendung: ssh [-1246AaCfGgKkMNnqsTtVvXxYy] [-b Bindungsadresse] [-c Verschlüsselungsspezifikation]
.....................

Es wird "Zu viele Wiederholungsversuche, die darauf warten, dass SSH verfügbar ist, gemeldet. Letzter Fehler: Die maximale Anzahl von Wiederholungsversuchen (60) wurde überschritten ...".

Warum ? Ich habe die SSH-Verbindung zwischen lokalem Host und Remote-Docker-Host ohne Passwort konfiguriert.

Wie kann der Docker-Host in die lokale Docker-Machine-Befehlszeile exportiert werden?

Hilfreichster Kommentar

@dweomer Ist das Hinzufügen eines vorhandenen Docker-Computers von einem anderen Computer nicht ein sehr häufiger und grundlegender Anwendungsfall?

Alle 63 Kommentare

Fügt die Docker-Computer-Unterstützung einen vorhandenen Docker-Host hinzu?

Da ich die letzten 5 Stunden in den Dokumenten gesucht habe, gibt es tatsächlich die Option "--driver = none" (undokumentiert). Siehe https://github.com/docker/machine/issues/2270 .

@ tdy218 @atemerev Soweit ich mich erinnere, wurden die Optionen --driver none absichtlich vergraben (und ich dachte, sie wurden aus der veröffentlichten ausführbaren Datei entfernt), da sie nur zu Testzwecken verwendet werden.

Verwandte Ausgabe: Ich habe ein Tröpfchen auf dem digitalen Ozean mit Docker-Maschine erstellt. Wie kann ich eine Instanz von einem anderen Laptop aus verwalten?

Ein Kollege hat die Zertifikate von seinem Laptop mit docker-machine regenerate-certs [name] . und jetzt kann ich nicht mehr auf meine Instanz zugreifen. Soll ich die neuen Zertifikate irgendwo manuell kopieren? Die Dokumentation dazu ist wirklich verwirrend.

$ docker-machine ls
NAME           ACTIVE   DRIVER         STATE     URL                        SWARM   DOCKER    ERRORS
default        -        virtualbox     Stopped                                      Unknown   
gapp-sandbox   *        digitalocean   Running   tcp://xx.xxx.xxx.xx:2376           Unknown   Unable to query docker version: Get https://xx.xxx.xxx.xx:2376/v1.15/version: x509: certificate signed by unknown authority

Ich habe eine Problemumgehung gefunden: https://github.com/docker/machine/issues/2270

Bearbeiten Sie die Datei config.json des Computers, um auf die CA- und Client-Schlüssel für diesen bestimmten Computer anstatt auf die globalen Computerschlüssel zu verweisen.

Also habe ich alle Dateien aus dem Ordner meines Kollegen kopiert und alle Pfade durch die meines Computers ersetzt. In meinem Fall ist der endgültige Pfad /Users/mturatti/.docker/machine/machines/gapp-sandbox/ .
Böse Lösung, aber es scheint zu funktionieren.

ca.pem
cert.pem
config.json
id_rsa
id_rsa.pub
key.pem
server-key.pem
server.pem

@dweomer Ist das Hinzufügen eines vorhandenen Docker-Computers von einem anderen Computer nicht ein sehr häufiger und grundlegender Anwendungsfall?

@dweomer Ist das Hinzufügen eines vorhandenen Docker-Computers von einem anderen Computer nicht ein sehr häufiger und grundlegender Anwendungsfall?

@atemerev : Nein, ich glaube nicht, dass es so ist. Soweit ich weiß, gibt es Docker Machine zum Erstellen / Bereitstellen von Hosts, die Docker-fähig sind.

Davon abgesehen gibt es den etwas weniger als offensichtlichen generic Treiber, den @ tdy218 meiner Meinung nach generic -Treiber übernimmt einen Host und stellt ihn erneut bereit. Alles, was es erfordert, ist ein laufender Host mit einem ssh-Daemon und ein Benutzer auf diesem Host mit passwortlosem sudo -Zugriff (oder nur root). Diese erneute Bereitstellung ist insofern zerstörungsfrei, als eine vorhandene Docker-Installation höchstens aktualisiert wird.

@weomer
Ich habe in den folgenden Tests versucht, mithilfe eines generischen Treibers einen vorhandenen Docker-Host hinzuzufügen.
Name des lokalen Hosts (mein Laptop): Chris-Laptop
Docker-Maschine ist bereits installiert, Version 0.6.0, Build e27fb87, Mac OS X 10.11
Name des Remote-Hosts (Mein VPS): li845-130 (139.162.3.130)
Docker-Engine ist bereits installiert, CentOS 7.0

1.Docker Daemon-Prozess auf dem Remote-Host
[ root @ li845-130 ~] # ps -ef | grep docker |
root 12093 1 0 02:09? 00:00:00 / usr / bin / docker-Daemon -H tcp: //0.0.0.0 : 2376

2.Konfigurieren Sie die SSH-Verbindung ohne Passwort
[ tdy218 @ Chris-Laptop ~] $ ssh [email protected]
Letzter Login: Mo Mar 28 03:06:07 2016 von 111.193.199.188

3. Fügen Sie lokalen Docker-Computern einen Remote-Docker-Host hinzu
[ tdy218 @ Chris-Laptop ~] $ docker-machine -D create --driver generic --generic-ip-address 139.162.3.130 --generic-ssh-user root linodevps
Docker Machine Version: 0.6.0, Build e27fb87
Binärer Pfad unter / usr / local / bin / docker-machine gefunden
Starten des Plugin-Servers für den generischen Treiber
Plugin-Server, der die Adresse 127.0.0.1:50319 abhört
() Aufruf von .GetVersion
Verwenden von API Version 1
() Aufrufen von .SetConfigRaw
() Aufrufen von .GetMachineName
(Flag-Lookup) Aufruf von .GetMachineName
(Flag-Lookup) Aufruf von .DriverName
(Flag-Lookup) Aufrufen von .GetCreateFlags
Binärer Pfad unter / usr / local / bin / docker-machine gefunden
Plugin-Server für Treiber generisch starten
Plugin-Server, der die Adresse 127.0.0.1:50323 abhört
() Aufruf von .GetVersion
Verwenden von API Version 1
() Aufrufen von .SetConfigRaw
() Aufrufen von .GetMachineName
(linodevps) Aufruf von .GetMachineName
(linodevps) Aufruf von .DriverName
(linodevps) Aufruf von .GetCreateFlags
(linodevps) Aufrufen von .SetConfigFromFlags
Vorab-Erstellungsprüfungen ausführen ...
(linodevps) Aufruf von .PreCreateCheck
(linodevps) Aufruf von .GetConfigRaw
Maschine erstellen ...
(linodevps) Aufruf von .Create
(linodevps) Aufruf von .GetConfigRaw
(linodevps) Kein SSH-Schlüssel angegeben. Wenn Sie jetzt und in Zukunft eine Verbindung zu diesem Computer herstellen, muss der SSH-Agent den entsprechenden Schlüssel enthalten.
(linodevps) DBG | IP: 139.162.3.130
(linodevps) Aufruf von .DriverName
(linodevps) Aufruf von .DriverName
Das Warten auf den Betrieb der Maschine kann einige Minuten dauern ...
(linodevps) Aufruf von .GetState
Betriebssystem der erstellten Instanz erkennen ...
Warten auf die Verfügbarkeit von SSH ...
Aufrufen der WaitForSSH-Funktion ...
(linodevps) Aufruf von .GetSSHHostname
(linodevps) Aufruf von .GetSSHPort
(linodevps) Aufruf von .GetSSHKeyPath
(linodevps) Aufruf von .GetSSHUsername
Verwenden des SSH-Clienttyps: extern
{[-o BatchMode = yes -o PasswordAuthentication = no -o StrictHostKeyChecking = no -o UserKnownHostsFile = / dev / null -o LogLevel = quiet -o ConnectionAttempts = 3 -o ConnectTimeout = 10 -o ControlMaster = no -o ControlPath = none [email protected] -p 22] / usr / bin / ssh}
So führen Sie den SSH-Befehl aus:
Ausfahrt 0
SSH cmd err, Ausgabe:::
Den Provisioner erkennen ...
(linodevps) Aufruf von .GetSSHHostname
(linodevps) Aufruf von .GetSSHPort
(linodevps) Aufruf von .GetSSHKeyPath
(linodevps) Aufruf von .GetSSHUsername
Verwenden des SSH-Clienttyps: extern
{[-o BatchMode = yes -o PasswordAuthentication = no -o StrictHostKeyChecking = no -o UserKnownHostsFile = / dev / null -o LogLevel = quiet -o ConnectionAttempts = 3 -o ConnectTimeout = 10 -o ControlMaster = no -o ControlPath = none [email protected] -p 22] / usr / bin / ssh}
So führen Sie den SSH-Befehl aus:
cat / etc / os-release
SSH cmd err, Ausgabe:: NAME = "CentOS Linux"
VERSION = "7 (Kern)"
ID = "Centos"
ID_LIKE = "rhel fedora"
VERSION_ID = "7"
PRETTY_NAME = "CentOS Linux 7 (Core)"
ANSI_COLOR = "0; 31"
CPE_NAME = "cpe: / o: centos: centos : 7"
HOME_URL = " https://www.centos.org/ "
BUG_REPORT_URL = " https://bugs.centos.org/ "

CENTOS_MANTISBT_PROJECT = "CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION = "7"
REDHAT_SUPPORT_PRODUCT = "Centos"
REDHAT_SUPPORT_PRODUCT_VERSION = "7"

Schlüssel CPE_NAME konnte nicht gesetzt werden, kein entsprechendes Strukturfeld gefunden
Schlüssel konnte nicht gesetzt werden, kein entsprechendes Strukturfeld gefunden
Schlüssel CENTOS_MANTISBT_PROJECT konnte nicht gesetzt werden, kein entsprechendes Strukturfeld gefunden
Schlüssel CENTOS_MANTISBT_PROJECT_VERSION konnte nicht gesetzt werden, kein entsprechendes Strukturfeld gefunden
Schlüssel REDHAT_SUPPORT_PRODUCT konnte nicht gesetzt werden, kein entsprechendes Strukturfeld gefunden
Schlüssel REDHAT_SUPPORT_PRODUCT_VERSION konnte nicht gesetzt werden, kein entsprechendes Strukturfeld gefunden
Schlüssel konnte nicht gesetzt werden, kein entsprechendes Strukturfeld gefunden
Kompatibler Host gefunden: Centos
Bereitstellung mit Centos ...
Kein speichergesteuerter Treiber angegeben, der Devicemapper verwendet

(linodevps) Aufruf von .GetMachineName
(linodevps) Aufruf von .GetSSHHostname
(linodevps) Aufruf von .GetSSHPort
(linodevps) Aufruf von .GetSSHKeyPath
(linodevps) Aufruf von .GetSSHUsername
Verwenden des SSH-Clienttyps: extern
{[-o BatchMode = yes -o PasswordAuthentication = no -o StrictHostKeyChecking = no -o UserKnownHostsFile = / dev / null -o LogLevel = quiet -o ConnectionAttempts = 3 -o ConnectTimeout = 10 -o ControlMaster = no -o ControlPath = none [email protected] -p 22] / usr / bin / ssh}

4. Die Befehlszeile des Remote-Docker-Hosts.
[ root @ linodevps ~] # ps -ef | grep docker |
root 17079 1 0 03:06? 00:00:00 / usr / bin / docker-Daemon -H tcp: //0.0.0.0 : 2376
root 17185 1 0 03:06? 00:00:00 sudo docker version
root 17190 17185 0 03:06? 00:00:00 Docker-Version

Der Docker-Daemon-Prozess wurde neu gestartet, aber es gab zwei weitere Docker-Versionsprozesse. Dann habe ich versucht, den Docker-Versionsbefehl manuell auszuführen. Er war hängen geblieben.

Es ist so schwierig, einen vorhandenen Docker-Host zur Docker-Maschinen-Befehlszeile hinzuzufügen ...

Wenn der Remote-Host keine Docker-Engine enthält, ist es einfach, einen Docker-Host (Docker-Engine installieren) über die Docker-Machine-Befehlszeile zu erstellen. Als obiges Problem ist der Docker-Computer jedoch begrenzt.

@dweomer Dies ist wahr, aber wenn ich Docker-Maschine oder Docker-Schwarm

Docker-Maschine / Docker-Schwarm sind für mich weit davon entfernt, produktionsbereit zu sein, und sollten zumindest als Beta gekennzeichnet werden. Oder ich würde gerne von jemandem hören, der es tatsächlich in der Produktion verwendet ...

FWIW, wenn Sie ~ / .docker einfach von diesem Workstation-Host auf den neuen ablegen (vorausgesetzt, das Home-Verzeichnis ist derselbe Pfad), funktioniert es. Wenn sich das Ausgangsverzeichnis unterscheidet, müssen Sie die .json-Dateien an mehreren Stellen (Schlüssel und Zertifikate usw.) bearbeiten, um z. B. /Users/macuser/.docker in /home/linuxuser/.docker zu ändern.

Diese Frage wurde anscheinend gründlich behandelt und / oder deckt bereits in anderen Fragen festgelegte Gründe ab. Vielen Dank an alle.

@nathanleclaire Ist der offizielle Ansatz zum Hinzufügen vorhandener Docker-Hosts (ob von Docker-Computer oder auf andere Weise erstellt) zum Kopieren des Ordners ~ / .docker zwischen den Client-Computern? Wenn ja, gibt es eine bestimmte Teilmenge der Dateien / eine Datei, die wir kopieren müssen?

Wenn der offizielle Ansatz stattdessen die Verwendung des generischen Treibers ist, wäre es hilfreich, das im Kommentar hier beschriebene Problem @ tdy218 zu beheben .

Ich glaube nicht, dass diese Frage überhaupt angesprochen wurde. Ich versuche, Code auf eine neue Maschine zu übertragen, und die beste Antwort, die jeder finden kann, um den Typ zu finden, der die Maschine hergestellt hat, und seine Dateien auf meine zu kopieren.

Ich bin mir nicht sicher, ob jemand dies hier in der realen Welt ausprobiert hat, aber es ist scheiße.

@TheSeanBrady Lassen Sie uns die Diskussion über zivile Themen fortsetzen. Wenn Sie Vorschläge für Lösungen haben, die Sie gerne sehen würden, teilen Sie diese bitte mit. Konzentrieren wir uns weiterhin auf Lösungen für Probleme.

Ich bin nur ehrlich. Sie versuchen, E-Mails zu senden, in denen Sie nach Dateien gefragt werden, da dies bisher bei mir nicht funktioniert. Dies wurde geschlossen, ohne das Problem zu beheben.

Ich bin nur ehrlich. Sie versuchen, E-Mails zu senden, in denen Sie nach Dateien gefragt werden, da dies bisher bei mir nicht funktioniert. Dies wurde geschlossen, ohne das Problem zu beheben.

Sie glauben nicht, dass es unnötig hart und nicht konstruktiv ist, etwas "scheiße" zu sagen und zu implizieren, dass der Rest von uns nicht "in der realen Welt" lebt?

Wir versuchen, eine Gemeinschaft zu fördern, in der Zusammenarbeit und Positivität gefördert werden. Ich bitte Sie, wenn Sie teilnehmen möchten, auch diese Grundsätze zu befolgen.

Aufgrund der Verwendung gespeicherter API-Anmeldeinformationen, SSH-Schlüssel und Zertifikate, die docker-machine s auf Computern gemeinsam nutzen, handelt es sich um ein umfassendes Problem bei der Verwaltung von Geheimnissen / ACLs, für dessen Behebung ganze andere Technologieklassen erfunden wurden. Der Umfang ist ziemlich groß. Möglicherweise können Schritte unternommen werden, um dies zu verringern, die Ihrem Anwendungsfall helfen. Warum also nicht einige proaktive Lösungen für die Implementierung vorschlagen?

Wenn Sie einen Vorschlag dazu einreichen möchten, wenden Sie sich bitte an. Wenn Sie in einer Pull-Anfrage auch einen Vorschlag machen möchten, der durch Code gesichert ist, empfehle ich Ihnen auch, dies zu tun. Aber bitte konzentrieren Sie die Diskussion auf jeden Fall auf Lösungen und bleiben Sie positiv.

Sie glauben nicht, dass es unnötig hart und nicht konstruktiv ist, etwas "scheiße" zu sagen und zu implizieren, dass der Rest von uns nicht "in der realen Welt" lebt?

Nicht wirklich, wenn es weitergeht ...

Diese Frage wurde anscheinend gründlich behandelt und / oder deckt bereits in anderen Fragen festgelegte Gründe ab. Vielen Dank an alle.

Das ist so ziemlich das, was ich eine summarische Entlassung nenne. Und mit "realer Welt" meine ich die Umgebung, in der wir dieses Zeug verwenden, nicht die, in der Sie einen der Entwickler in der Halle passieren können.

Dies wäre eine angemessenere Antwort gewesen ...

Aufgrund der Verwendung gespeicherter API-Anmeldeinformationen, SSH-Schlüssel und Zertifikate, die Docker-Computer auf mehreren Computern gemeinsam nutzen, handelt es sich um ein umfassendes Problem bei der Verwaltung von Geheimnissen / ACLs, für dessen Behebung ganze andere Technologieklassen erfunden wurden.

... obwohl diese Technologien erfunden wurden und die meisten von ihnen Open Source sind.

Wie steht es jedoch mit einem docker-machine add <hostname> , bei dem die SSH-Schlüsselauthentifizierung verwendet wird, um die erforderlichen Zertifikate für die TLS-Verbindung zu übergeben?

Was ist mit einer Docker-Maschine hinzufügenVerwenden Sie die SSH-Schlüsselauthentifizierung, um die erforderlichen Zertifikate für die TLS-Verbindung zu übergeben?

Das könnte das Problem lösen ... zumindest für Entwicklerumgebungen

Eine andere Möglichkeit besteht darin, einen Docker-Socket auf einem über SSH verfügbaren Host zu verwenden. Dies ist mir sehr vorzuziehen, da er den vorhandenen SSH-Authentifizierungsmechanismus verwendet (der in meinem Fall mit HSMs gesichert ist) und keine Anpassung von Ports / Firewalls erforderlich macht unterstütze TLS.

Ich habe meine eigene Lösung dafür mit socat zusammen gehackt, aber es wäre sehr schön, wenn die Docker-Maschine dies unterstützen könnte. Es ist nicht schwer, ssh zu einem Host zu senden, socat zu installieren, falls es noch nicht installiert ist, und socat zu verwenden, um die ssh-Sitzung in einen lokalen Socket für die Kommunikation mit der Remote-Datei /var/lib/docker.sock zu verwandeln. Dies bedeutet auch, dass Docker-Computer in diesem Treibermodus nichts über Authentifizierung, Zertifikate oder TLS wissen müssen, obwohl es von socat lokal abhängt, um den lokalen Socket zu erstellen ...

Es wäre schön, einen Treibermodus zu sehen, der diese Art von Local-Socket-Setup so ausführt, wie der vorhandene SSH-Treiber das gesamte TLS-Material einrichtet. In vielen Organisationen ist die Verteilung / Portweiterleitung von SSH-Schlüsseln bereits gelöst, und es ist mühsam, zu erwarten, dass sie jetzt eine PKI für das TLS verteilen / verwalten (und einen anderen Port öffnen).

tyrell:~▻ cat Library/Local/bin/ber1docker 
#!/bin/bash

DOCKER_REMOTE_HOST="ber1.local"
DOCKER_SOCK="$TMPDIR/docker.sock"
export DOCKER_HOST="unix://$DOCKER_SOCK"
rm $DOCKER_SOCK

socat UNIX-LISTEN:$DOCKER_SOCK,reuseaddr,fork \
   EXEC:"ssh root@$DOCKER_REMOTE_HOST 'socat STDIO UNIX-CONNECT:/var/run/docker.sock'" &

Also kein "Docker-Maschine hinzufügen ..."?

+1 für docker-machine add ...

Wir möchten die Schönheit von eval $(docker-machine env mymachine) für alle unsere Teammitglieder haben (natürlich für gemeinsam genutzte Entwicklungsumgebungen).

Ich habe mit dem Digitalocean-Treiber ein Tröpfchen hochgefahren und eine Site mit Docker-Compose von meiner Workstation aus eingerichtet.

Dann musste ich auf der Site arbeiten, aber von einem völlig anderen Ort aus, weit weg von meiner Workstation, wo ich die ursprünglichen Docker-Maschinenbefehle ausführte.

Ist das nicht eine Situation, die häufig genug ist?

Es ist eine sehr häufige Lösung. Vor allem, wenn Sie in einem Team namens "Team" arbeiten. Aber sie meiden dieses Thema seit ungefähr 18 Monaten. Alles, was sie tun, ist, Probleme wie dieses zu schließen und dann so etwas wie "Es ist super kompliziert, eine solche Funktion zu implementieren" zu sagen, und dass Sie es jederzeit selbst tun und eine Pull-Anfrage vorschlagen können.
Ich habe den Eindruck, dass sie in den letzten 18 Monaten noch nicht einmal an einer Lösung gearbeitet haben.

Vielen Dank für Ihre Antwort, obwohl noch keine einfache Möglichkeit zu realisieren.

Bewahren Sie die Anmeldeinformationen und so weiter in der Cloud auf.

Geben Sie mir Anweisungen, wie ich meine Dropbox oder mein Google Drive zum Speichern verwenden kann.

Lassen Sie mich die Informationen von Digitalocean abfragen, da dies der Treiber ist, den ich verwendet habe.

Das kann wirklich nicht so schwer sein.

Ja, das klingt sicher.
Am Mittwoch, 9. November 2016 um 09:28 Uhr Michael Schwartz [email protected]
schrieb:

Bewahren Sie die Anmeldeinformationen und so weiter in der Cloud auf.

Geben Sie mir Anweisungen, wie ich meine Dropbox oder mein Google Drive zum Speichern verwenden kann.

Das kann wirklich nicht so schwer sein.

- -
Sie erhalten dies, weil Sie erwähnt wurden.
Antworte direkt auf diese E-Mail und sieh sie dir auf GitHub an
https://github.com/docker/machine/issues/3212#issuecomment -259457472,
oder schalten Sie den Thread stumm
https://github.com/notifications/unsubscribe-auth/ABxbKbZQLUfK9ENnWpNKiF207ZGpXFs2ks5q8fSagaJpZM4H07I2
.

Nicht weniger sicher als das Senden der Befehle und meines gesamten Codes über das Internet an DO.

Oder alle meine proprietären Sachen auf Docker Hub oder Github hochladen, sogar ein privates Repo.

Für diejenigen, die versuchen, der Entwicklerumgebung einen Docker-Computer hinzuzufügen, können Sie Folgendes tun:

Docker-Maschine erstellen -d "keine" --url http://192.168.10.100 : 4243 bla

Dies ist der Fall, wenn auf dem Host die HTTP- und nicht die TSL-Authentifizierung aktiviert ist.

Ich habe viel Zeit damit verbracht, dieses undokumentierte Zeug zu finden

Ich denke, es scheint ein wenig kurzsichtig zu sein, nur einem Computer zu erlauben, auch einen Docker-Cluster zu verwalten. Was ist mehr als nur die Verantwortung für die Verwaltung des Clusters mit Ihrem Team zu teilen? Wie wäre es, wenn Sie mehr als einen Fehlerpunkt haben oder mehreren automatisierten Agenten die Möglichkeit geben, mit dem Docker-Cluster zu interagieren?

+1 für den Exportbefehl.

Es könnte alle Einstellungen und Zertifikate in eine sichere Tar- oder Zip-Datei exportieren, die von Docker-Maschinen mit einem Passwort importiert werden kann.

Scheint eine vernünftige Bitte zu sein.

@bmmathe Dieser Befehl ist bereits tar -c ~/.docker/machine | bzip2 > docker-machine-config.tbz2 .

So geht lxd damit um. Möglicherweise könnte auf dem Computer ein Kennwort oder ein Schlüssel konfiguriert werden, mit dem Zertifikate kopiert oder neu generiert werden können.

Das ist so traurig 😖. Meine Remote-Computer zeigen jetzt lokal den Status timeout , wenn docker-machine ls wird. Dies hat die Maschinenkonfigurationen durcheinander gebracht. Es scheint nicht herauszufinden, wie sie im lokalen Docker-Maschinenordner neu konfiguriert / repariert werden können. Keine lokale Bereitstellung mehr? Soll ich die VMs löschen und neu erstellen?

Abstimmung über eine Option zum Hinzufügen von Remotecomputern zu den lokalen Docker-Computern:

Docker-Maschine hinzufügen--Treiber

⏳🤒

Dies ist eine wirklich wichtige Funktion. Ich verstehe nicht, warum das so schwierig ist. Auch wenn ich die Zertifikate neu generieren muss, ist das für mich kein Problem, aber ich möchte, dass dies dokumentiert wird und ein Befehl zum Arbeiten vorhanden ist.

Wenn ich mich richtig erinnern kann, wurde mein Problem durch falsche Berechtigungen und / oder einen lokalen Benutzernamen verursacht, der nicht mit dem Remote-Benutzernamen übereinstimmt (der Standardbenutzer ist docker-user ). Es ist wahrscheinlich ein Problem in Ihrem Namen, Sie müssen tiefer graben.
Der generische Treiber für den Befehl docker-machine funktioniert für verschiedene Anbieter, z. B. Google, einwandfrei.

Überprüfen Sie diese:
https://github.com/docker/machine/issues/3522#issuecomment -280275707
https://docs.docker.com/machine/drivers/generic/
• Ich konnte die anderen Gespräche zu diesem Thema nicht finden, die mich zur Lösung führten.

Heute habe ich in meinem Fall die Ursache für das Hinzufügen eines Remote-Docker-Host-Fehlers gefunden.
[ root @ linodevps ~] # ps -ef | grep docker | grep -v grep
root 17079 1 0 03:06? 00:00:00 / usr / bin / docker-Daemon -H tcp: //0.0.0.0 : 2376 // Diese Schreibweise erlaubt keine lokale fd- oder unix-Socket-Kommunikation zwischen Docker-Client und -Server und hängt daher bei sudo docker Versionsbefehl beim Ausführen der Docker-Maschine hinzufügen.

Um dies zu korrigieren, müssen Sie nur die Konfigurationsdatei des Docker-Dienstes bearbeiten (Standard ist /usr/lib/systemd/system/docker.service) und den Wert des ExecStart-Parameters unter / usr / bin / docker-Daemon -H tcp: // ändern tcp: //0.0.0.0 : 2376 -H unix: ///var/run/docker.sock (Standard ist / usr / bin / docker daemon -H fd: //) oder / usr / bin / docker-Daemon -H tcp: //0.0.0.0 : 2376 -H fd: // oder exportiere DOCKER_HOST = tcp: //0.0.0.0 : 2376,
und dann sudo systemctl daemon-reload && sudo systemctl docker neu starten, docker-machine add befehl erneut ausführen, einen Moment warten, es wird erfolgreich hinzugefügt. Während des Hinzufügens generiert der Docker-Computer SSL-Zertifikate für den Ziel-Docker-Host und generiert die neue Docker-Service-Konfigurationsdatei 10-machine.conf in einem neuen Verzeichnis mit dem Namen /etc/systemd/system/docker.service.d

tdy218 @ Chris-Laptop $ dm ls
NAME ACTIVE DRIVER STATE URL SWARM DOCKER FEHLER
docker-vm119 - generic Running tcp: //192.168.135.119 : 2376 v17.03.1-ce
docker-vm120 - generisch Gestoppt Unbekannt

docker-vm119 ist der vorhandene Docker-Host vor dem Hinzufügen.

Aus diesem Fall wissen wir, dass Docker-Maschine unterstützt wird, indem ein vorhandener Docker-Host hinzugefügt wird , danke

docker-machine create --driver none -url=tcp://123.123.123.123:2376 dockerhost1 ist das Beste, was ich seit langer Zeit über Docker gelernt habe!

Es sollte wirklich einfacher sein, eine Entwicklungsmaschine zwischen Benutzern zu teilen.

// cc @nathanleclaire

Update: um es klar zu sagen: Insbesondere macht es mir nichts aus, die Zertifikate vorab an andere Teammitglieder weiterzugeben. Auch dort gibt es Raum für Verbesserungen.

@dhrp Welchen Prozess befolgen Sie, um die Zertifikate vorab zu teilen? Wo sind sie zu finden?

Oh mein lieber Herr, kann nicht mehr als anderthalb Jahre an die Vergangenheit glauben, niemand will dieses Problem lösen 😞 😞 😞

@thaJeztah @AkihiroSuda @albers @tianon Glauben Sie wirklich, dass dies keine sehr häufige und kritische Anforderung ist?

Ich habe versucht, einen vorhandenen Docker-Host erneut bereitzustellen ( docker-machine create --driver=generic --generic-ip-address <ip> <name> und es schien zu funktionieren, ohne vorhandene Zertifikate ungültig zu machen. Dies wurde auf demselben Computer durchgeführt, auf dem der Docker-Host ursprünglich bereitgestellt wurde. Ist dies ein erwartetes Ergebnis?

Können Sie dieses Problem erneut öffnen? Ich denke, das ist noch nicht gelöst.

Stolperte versehentlich darüber.

Nun, @nathanleclaire hat den Punkt klargestellt: Dies ist NICHT der Punkt des Hinzufügens einer Docker-Maschine, sondern der Punkt des Teilens von Schlüsseln, die NICHT an einem anderen Ort als dem ursprünglichen Client-Computer gespeichert werden sollen. Genau so soll das gemacht werden und einige Leute hier werden wütend, ohne ausreichend über das Thema nachzudenken.

Wenn Sie die Schlüssel wirklich mit einem Team teilen möchten, fahren Sie einfach mit einem privaten Repo für die Quellcodeverwaltung fort und akzeptieren Sie die Risiken, die Sie eingehen. Zum Exportieren der benötigten Schlüssel gibt es ein Skript, das bereits von jemandem erstellt wurde: https://gist.github.com/schickling/2c48da462a7def0a577e

"Es gibt keinen Grund, warum wir nicht höflich sein können" - Leonidas

Ich denke immer noch, Docker-Maschine sollte sich eher wie scp verhalten. Was verhindert, dass Unterstützung für mehrere Schlüssel hinzugefügt wird?

Eine Problemumgehung, die ich gerade gefunden habe.
Wenn Sie eine vorhandene Docker-Maschine auf derselben Plattform haben (meine ist Google) und Sie auf diese Maschine ssh / scp können, ohne Docker-Maschine zu benötigen, können Sie die andere Maschine kopieren und zum Laufen bringen.
Ich tat:

mkdir ~/.docker/machine/machines/new-machine
cp -r ~/.docker/machine/machines/old-machine/* ~/.docker/machine/machines/new-machine/

#then replace all instances of "old-machine" with "new-machine" in ~/.docker/machine/machines/new-machine/config.json

#then add the public key from your new-machine folder into the authorized_keys file for the docker-user on the new machine, e.g.
scp ~/.docker/machine/machines/new-machine/id_rsa.pub docker-user<strong i="8">@new_machine</strong>:/home/docker-user
ssh docker-user<strong i="9">@new_machine</strong> -c "cat ~/id_rsa.pub >>~/.ssh/authorized_keys"

(Kopieren Sie die ssh-Befehle nicht wörtlich, sondern suchen Sie nach der richtigen Vorgehensweise - https://encrypted.google.com/search?hl=de&q=ssh%20copy%20public%20key)

+1 für den Export / Import-Befehl.
+1 für Multi-Key-Unterstützung.

Die Möglichkeit, Verwaltungsarbeitsplätze nicht zu verschieben, ist einfach inakzeptabel und führt zu einem massiven Single Point of Failure.

zB Computerverlust, Diebstahl, Feuer, Hardwarefehler, Softwarefehler, Teamzugriffsprobleme, Administratorprobleme usw.

Docker-Machine wurde nicht für diesen Zweck konzipiert - dies ist ein Fast-Food-Tool für die Bereitstellung einzelner Entwickler. Das ist es, schlicht und einfach, und es funktioniert - und es ist kostenlos!

Einige der hier genannten Funktionen sind im Docker EE-Angebot implementiert (z. B. Teams und RBAC).

Wenn die Leute nicht dankbar sein können, versuchen Sie zumindest, vernünftig zu sein.

Ich glaube nicht, dass Machine-Share in diesem Thread bereits erwähnt wurde:

machine-export <machine-name>
>> exported to <machine-name>.zip
machine-import <machine-name>.zip
>> imported

Hey @andrevtg

Entschuldigung, wenn ich undankbar schien. Ich liebe Docker-Maschine wirklich und dachte, das würde es noch besser machen.
Ich denke, die Möglichkeit für einzelne Entwickler, einfach zwischen Computern zu wechseln, wäre wirklich hilfreich.

Wenn mein Zeitplan frei wird, kann ich versuchen, GO zu lernen, und versuchen, diese Funktion hinzuzufügen.

Hey @ dmitrym0

Ich denke, dieses Ticket konzentrierte sich mehr auf die mangelnde Möglichkeit, eine Verbindung zu vorhandenen Remote-Docker-Hosts herzustellen.
Die gemeinsame Nutzung von Maschinen scheint jedoch nützlich zu sein, wenn lokale Docker-Hosts verschoben werden.
Danke für den Vorschlag.

@ Jared-Harrington-Gibbs- Maschinenfreigabe löst speziell das Problem des "Hinzufügens vorhandener Docker-Maschinen-Hosts". Wir stellen verschiedene Apps über Docker-Compose bereit und es funktioniert gut für uns. Wir exportieren den Satz von Zertifikaten mit machine-share und verteilen ihn an alle Mitglieder des Teams, die ihn benötigen. Es ist nicht ideal, aber es funktioniert in Ordnung.

Ich habe versucht, mit einem generischen Treiber einen vorhandenen Docker-Host hinzuzufügen. Dieser wird nach mehrmaligem erneuten Versuch erfolgreich hinzugefügt.

@sneak Diese Lösung scheint für mich nicht zu funktionieren, da die Pfade in config.json nicht auf die richtigen Dateien verweisen. Ich würde annehmen, dass docker-machine auf der Datei config.json basiert, aber ich könnte mich irren, habe sie noch nicht getestet.

Dies stellt ein Problem für mich dar, da ich möglicherweise in einer Umgebung ausgeführt werde, in der ich möglicherweise nicht genau weiß, in welchem ​​Pfad die Dateien gespeichert sind. Möglicherweise gibt es eine Option für einen relativen Pfad?

Wenn das Problem die Arbeitskraft ist, könnte ich ein paar Tage Zeit haben, um zu versuchen, eine Lösung für die Community zu finden. Ich würde es jedoch vorziehen, eine Anweisung von den Betreuern zu erhalten. Zeigt [Resolved] in diesem Fall eine Entscheidung an, diese Funktion nicht nativ zu unterstützen, oder wird sie bereits an einer Stelle unterstützt, die ich nicht sehe?

Dies ist eine Funktion, deren Implementierung NICHT beabsichtigt ist. Es macht keinen Sinn zu erwarten, dass der Remote-Computer die privaten Schlüssel speichert, die nur auf dem Computer des ursprünglichen Entwicklers vorhanden sein sollen.

Selbst Docker EE stellt sicher, dass bei jeder Anforderung ein anderes "Client-Bundle" generiert wird, und speichert diese nicht auf dem Host.

Die Leute hier fragen nach einer Funktion, die einfach zu implementieren ist, die aber aufgrund einer angemessenen Sicherheitsbeschränkung überhaupt keinen Sinn macht.

@andrevtg Die Anforderung besteht nicht darin, dass die VM selbst die Schlüssel speichert (was die Schlüssel völlig unbrauchbar machen würde), sondern dass der Docker-Maschinen-Client (der aus Code besteht, es handelt sich um eine tatsächliche Anwendung) eine Möglichkeit für Benutzer bereitstellt freiwillig Schlüssel von einem Client an einen anderen zu übertragen.

Eine einfache Möglichkeit, dies zu tun, besteht darin, einen docker-machine export -Befehl bereitzustellen, der die Schlüssel in einem Archiv bündelt, und einen entsprechenden docker-machine import -Befehl für einen Empfänger dieses Archivs, um die in beschriebenen Maschinen zu importieren das Archiv. Die Verschlüsselung / Entschlüsselung an den Grenzen der Übertragung der Schlüssel ist dann Sache der Benutzer (sie können PGP-E-Mail, SFTP verwenden, was immer sie wollen).

Genau docker-machine create eine riesige Konfigurationsdatei und Schlüssel, die Anfänger nicht verstehen oder nicht replizieren können. Vielleicht ist das Erstellen eines SSH-Schlüssels so einfach wie das Hinzufügen eines Schlüssels zur Hosts-Datei, aber das ist nicht dokumentiert. Zu welchem ​​Container fügen wir es hinzu? Und wie richten wir es auf einem anderen Computer ein und benachrichtigen docker-machine darüber? Können wir trotzdem docker-machine use oder müssen wir alle Umgebungsvariablen manuell festlegen?

Idealerweise sollte ein docker-machine add [name] zum Hinzufügen eines Schlüssels, docker-machine export zum Exportieren der Konfigurationsdateien und docker-machine import zum Importieren dieser Konfigurationsdateien auf einen anderen Computer vorhanden sein. Es wäre auch schön, docker-machine rm [name] zu haben, um den Zugriff auf Schlüssel zu widerrufen.

@dhrp Ich habe einen Docker-Server auf einem RPI ausgeführt. Ich möchte von meinem lokalen Host mit Docker-Maschine darauf zugreifen. Alles was ich tun müsste ist:
docker-machine create --driver none -url=tcp://raspberry.local:22 rpihost
Funktioniert das?

Also @ 360disrupt , oder? Ich kämpfe mit dem gleichen Anwendungsfall.

Also @ 360disrupt , oder? Ich kämpfe mit dem gleichen Anwendungsfall.

Nein noch nicht.

Hallo allerseits. Dies wurde noch nicht gelöst? Wir verwenden Docker für alle Apps in dem Unternehmen, für das ich arbeite. Unser größtes Problem hängt mit der gemeinsamen Nutzung der Maschinen zusammen. Ich habe versucht, den generischen Treiber mehrmals zu verwenden, aber das Problem bei diesem Ansatz ist, dass beim Erstellen eines Computers mit dem generischen Treiber und dem Verbinden mit einem vorhandenen Server nur die Container gelöscht werden, die derzeit auf dem Server ausgeführt werden.

Die einzige Möglichkeit, die wir gefunden haben, bestand darin, ein einfaches Skript in Python zu erstellen, das nur den Computer importiert und exportiert, auf den der Entwickler zugreifen möchte. Dieses Skript ist dafür verantwortlich, alle Konfigurationsdateien und Zertifikate vom Maschinenbesitzer in die neue Quelle zu kopieren. Es funktioniert gut und wir haben keine Probleme damit. Ich kann nur nicht glauben, dass es keinen offiziellen Weg gibt, Maschinen zu teilen, ohne unsere privaten Zertifikate teilen zu müssen.

Ich arbeite in einem Projekt und werde es in GitHub veröffentlichen, um dieses Problem auf andere Weise zu lösen. Grundsätzlich baue ich nur ein PaaS, das alle Zertifikate aller Maschinen konzentriert, die wir hier in unserem Unternehmen haben. Und wenn jemand so etwas bereitstellen oder ausführen möchte, müssen Sie nur eine Verbindung zum PaaS herstellen und nicht zum Server. Es ist wie ein Tunnel. Bald werde ich die erste Version dieses PaaS veröffentlichen.

+1 für docker-machine add oder docker-machine create --existing

Dies löste mein Problem: machine-share : computer :: rabbit2:

@dweomer Ist das Hinzufügen eines vorhandenen Docker-Computers von einem anderen Computer nicht ein sehr häufiger und grundlegender Anwendungsfall?

@atemerev : Nein, ich glaube nicht, dass es so ist. Soweit ich weiß, gibt es Docker Machine zum Erstellen / Bereitstellen von Hosts, die Docker-fähig sind.

Davon abgesehen gibt es den etwas weniger als offensichtlichen generic Treiber, den @ tdy218 meiner Meinung nach generic -Treiber übernimmt einen Host und stellt ihn erneut bereit. Alles, was es erfordert, ist ein laufender Host mit einem ssh-Daemon und ein Benutzer auf diesem Host mit passwortlosem sudo -Zugriff (oder nur root). Diese erneute Bereitstellung ist insofern zerstörungsfrei, als eine vorhandene Docker-Installation höchstens aktualisiert wird.

Ich weiß, dass dies ein gelöstes Problem zu sein sagen , dass ich muss : Als Entwicklungsteam müssen wir fast wöchentlich eine Verbindung zu anderen bereitgestellten Maschinen herstellen.

Dies löste mein Problem: Maschinenfreigabe 💻 🐇

Ich kann bestätigen, dass dieses npm-Paket funktioniert.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen