Machine: Die Verwendung von Docker-Machine zum Importieren von Hosts mit --driver = generic und / oder --url funktioniert nicht.

Erstellt am 23. Mai 2015  ·  62Kommentare  ·  Quelle: docker/machine

Hallo Leute
Dies ist kein Problem. Es tut mir leid, wenn dies der falsche Ort ist, um diese Frage zu stellen. Wenn dies nicht der richtige Ort ist, weisen Sie mich bitte auf den richtigen Ort.

Ich verstehe, dass wir Docker-Machine verwenden können, um mithilfe von Treibern wie Virtualbox, Cloud-Provider-Treiber usw. eine Verbindung zu verschiedenen Hosts herzustellen. Wenn ich bereits einen Host habe, auf dem Docker unter Baremetal Linux ausgeführt wird, wie integrieren wir dies in Docker-Machine? Ohne Docker-Maschine könnte ich dasselbe tun, indem ich einen Docker-Daemon an einem bestimmten Port ausführe und eine externe Verbindung vom Docker-Client zur Docker-Daemon-IP und zum Port herstelle. In Docker-Machine gibt es eine Option zum Erstellen eines Hosts ohne Treiber. Ist das für diesen Zweck? Ich konnte nicht finden, wie ich es verwenden konnte, um eine Verbindung herzustellen.

Vielen Dank
Sreenivas

drivegeneric kinbug

Hilfreichster Kommentar

@ Nathanleclaire Gibt es ein Update dazu? Ich versuche herauszufinden, wie ich mit docker-machine eine Verbindung zu einem Docker-Host in Microsoft Azure herstellen würde, den ich von einem anderen Computer aus erstellt habe. Im Moment habe ich keine Lösungen.

Alle 62 Kommentare

Hallo @smakam , ich glaube, was Sie suchen, ist der url Treiber: http://docs.docker.com/machine/#adding -a-host-without-a-driver

Hallo @nathanleclaire
Danke für die Antwort.
Ich habe mir den von Ihnen erwähnten Link angesehen und Folgendes versucht, kein Glück.

Zuerst habe ich es ohne TLS versucht:
Auf einem Ubuntu-Computer habe ich dies getan, um den Docker-Agenten zu starten:
sudo docker -d -H unix: ///var/run/docker.sock -H tcp: //192.168.56.101 : 2376 &

Unter Windows, auf dem Docker-Computer installiert war, habe ich Folgendes getan:
$ docker-machine create --url = tcp: //192.168.56.101 : 2376 custom6
← [34mINFO ← [0m] "custom6" wurde erstellt und ist jetzt die aktive Maschine.
$ docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM
custom6 * none tcp: //192.168.56.101 : 2376

Ich erhalte diesen Fehler:
$ docker-machine env custom6
← [31mFATA ← [0m] Öffnen Sie C: \ Users \ srmakam.docker \ machine \ machine \ custom6ca.pem: Das System kann die angegebene Datei nicht finden.

Nicht sicher, ob Docker-Maschine TLS erzwingt. Ich habe versucht, Docker Agent mit Zertifikat und Schlüssel zu starten und habe es mit Docker Client versucht, auch damit kein Glück.

Vielen Dank
Sreenivas

Wir beauftragen TLS im Wesentlichen in unserer derzeitigen Form. Wenn Sie Ihre eigene Zertifizierungsstelle und Zertifikate / Schlüssel einrichten, können Sie diese wahrscheinlich über die gloabl-Optionen --tls-ca-cert , --tls-ca-key für Docker Machine verwenden. @ehazlett Irgendein Kommentar?

Hallo

Ich habe es mit TLS versucht, ich konnte es immer noch nicht zum Laufen bringen, nicht sicher, was mir fehlt:
Ich habe Docker auf meinem Ubuntu-Host gestartet:
sudo / usr / bin / docker -d --tlsverify --tlscacert =

/ca.pem --tlskey =/key.pem --tlscert =/cert.pem --host = unix: ///var/run/docker.sock --host = tcp: //0.0.0.0 : 2376

Dann habe ich versucht, einen Docker-Computer-Host ohne Treiber zu erstellen:
Docker-Maschine --tls-client-cert =

/cert.pem --tls-ca-cert =/ca.pem --tls-client-key =/key.pem create --url = tcp: //: 2376 custom3

Beim Versuch, die Umgebung zu sehen, wird folgende Fehlermeldung angezeigt:
$ docker-machine env custom3
← [31mFATA ← [0m] Öffnen Sie C: \ Users \ srmakam.docker \ machine \ machinecustom3ca.pem: Das System kann die angegebene Datei nicht finden.

Vielen Dank
Sreenivas

Sie möchten höchstwahrscheinlich vorhandene Zertifizierungsstellen, Clients usw. für alle maschinenbezogenen Dinge verwenden, da die Einstellungen für --tls-ca-cert usw. global sind.

Für Ihren Docker-Daemon möchten Sie die Zertifizierungsstelle und das Serverzertifikat / die Serverschlüssel verwenden. Oben verwenden Sie das Zertifizierungsstellenzertifikat, jedoch den Clientschlüssel und das Zertifikat. Sie würden etwas brauchen wie:

docker -d --tlsverify --tlscacert ca.pem --tlscakey ca-key.pem --tlscert server.pem --tlskey server-key.pem

@ehazlett
Ich habe versucht, globale Einstellungen im Verzeichnis "certs" zu verwenden, um Docker-Maschinen zu erstellen und Optionen in der Befehlszeile anzugeben.\ Verzeichnis.
Wie bekomme ich "server.pem" und "server-key.pem"? Soll ich es generieren?

Ich konnte mit TLS eine Verbindung zwischen Docker-Client und Docker-Agent auf einem separaten Computer herstellen, ohne Docker-Computer zu verwenden.

Vielen Dank
Sreenivas

Können Sie die verwendeten Befehlszeilenargumente anzeigen? Wenn Sie angeben, sollte die Zertifikatsmaschine sie nur verwenden. Wenn nicht, ist es ein Fehler :)

Hallo @ehazlett
Zuerst habe ich Docker Agent wie folgt gestartet:
sudo / usr / bin / docker -d --tlsverify --tlscacert = / home / xxx / .docker / machine / certs / ca.pem --tlskey = / home / xxx / .docker / machine / certs / key.pem --tlscert = / home / xxx / .docker / machine / certs / cert.pem --host = unix: ///var/run/docker.sock --host = tcp: //0.0.0.0 : 2376

Dann habe ich den Docker-Machine-Client folgendermaßen gestartet:
Docker-Maschine --tls-ca-cert = / home / xxx / .docker / machine / certs / ca.pem --tls-client-key = / home / xxx / .docker / machine / certs / key.pem - -tls-client-cert = / home / xxx / .docker / machine / certs / cert.pem create --url = tcp: //0.0.0.0 : 2376 custom3

Ich habe diesen Fehler beim Einstellen der Umgebung erhalten:
xxx @ ubuntu : ~ $ docker-machine env custom3
Öffnen Sie /home/xxx/.docker/machine/machines/custom3/ca.pem: Keine solche Datei oder kein solches Verzeichnis

Hier führe ich Docker Agent und Docker-Computer auf demselben Ubuntu-Computer aus. Ich erhalte eine ähnliche Fehlermeldung, wenn der Docker-Agent unter Ubuntu und der Docker-Computer unter Windows ausgeführt werden.

Vielen Dank
Sreenivas

Sie sollten nicht key.pem und cert.pem für die Docker-Engine verwenden. Die Engine benötigt ein Serverschlüssel / Zertifikat-Paar (die Maschine erstellt diese).

Wie haben Sie für die Umwelt die Maschine custom3 ? Es sieht so aus, als ob während der Erstellung ein Fehler aufgetreten ist, wenn diese Datei nicht vorhanden ist.

Hallo @ehazlett
Wie soll ich die Docker-Engine starten? Nach meinem Verständnis werden Docker-Maschinen mit TLS beauftragt.

So habe ich eine custom3-Maschine erstellt. Dies gab mir keinen Fehler.
Docker-Maschine --tls-ca-cert = / home / xxx / .docker / machine / certs / ca.pem --tls-client-key = / home / xxx / .docker / machine / certs / key.pem - -tls-client-cert = / home / xxx / .docker / machine / certs / cert.pem create --url = tcp: //0.0.0.0 : 2376 custom3

Sollte ich das Serverschlüssel / Zertifikat-Paar manuell erstellen, wie es der Computer tun würde, wenn der Treiber mit dem Docker-Computer verwendet würde?

Vielen Dank
Sreenivas

@smakam das sollte stimmen. Es sollte einen Serverschlüssel basierend auf dieser vorhandenen Zertifizierungsstelle generieren. Ich werde einige Tests durchführen, um festzustellen, ob ein Problem vorliegt.

@smakam Gibt es ein Update zu diesem Problem oder können wir es schließen?

@ Nathanleclaire Ich bin immer noch nicht in der Lage, es zum
Dies ist, was erwähnt wird:
Docker-Maschine erstellen -d generic \
--generic-ssh-user ubuntu \
--generic-ssh-key ~ / Downloads / manual_created_key.pub \
--generic-ip-address 12.34.56.78 \
Urwald

Ich gehe davon aus, dass .pub ein Tippfehler ist und wir einen privaten Schlüssel angeben müssen. Ich habe 2 Arten von Fehlern in 2 verschiedenen Hosts:

Fall 1:
SSH-Schlüssel importieren ...
Fehler beim Erstellen der Maschine: Beenden Sie den Status 1
Sie sollten den Anbieter überprüfen, um sicherzustellen, dass der Computer und die zugehörigen Ressourcen ordnungsgemäß entfernt wurden.

Fall 2:
SSH-Schlüssel importieren ...
Fehler beim Abrufen des SSH-Befehls, um zu überprüfen, ob der Dämon aktiv ist: Beenden Sie den Status 1
Fehler beim Abrufen des SSH-Befehls, um zu überprüfen, ob der Dämon aktiv ist: Beenden Sie den Status 1

Übrigens, wo werden detaillierte Protokolle der Docker-Maschine gespeichert?
Ich habe es sowohl mit Docker-Maschine für Windows als auch mit Linux versucht.

Vielen Dank
Sreenivas

Dasselbe Problem.
Sowohl die generischen Methoden --url als auch -d funktionieren nicht.

Ich habe die gleichen Schritte wie beim Originalposter versucht und ein ähnliches Problem festgestellt. Zu diesem Zeitpunkt habe ich den generischen Treiber ausprobiert und bin auf einen Fehler gestoßen, der dem in Fall 1 (CentOS 7) ähnelt.

Gleiches Problem. Kann --url nicht verwenden und das Zertifikat angeben.

Könnte ich vorschlagen, dass das Docker-Team ein kurzes Tutorial schreibt, das uns Schritt für Schritt durchführt, wäre es sehr hilfreich.

Das gleiche Problem hier mit anyconnect vpn verbunden, gut nachdem ich meinen Laptop ohne anyconnect neu gestartet habe, ist es weg.

+1 für das Problem.
Ich habe versucht, docker-machine create --url= mit meinem vorhandenen Docker-Setup auf dem Remote-Host zu verwenden, aber kein Glück. DM versucht nicht, TLS von $HOME/.docker/machine/machines/<name>/ca.pem .

Gleiches Problem. Ich habe die gleichen Schritte versucht, aber immer noch keine Serverzertifikate / -schlüssel generiert.
Docker-Maschine Version 0.4.0
Docker Version 1.8.0

Gleiches Problem. Ich habe die gleichen Schritte versucht, aber immer noch keine Serverzertifikate / -schlüssel generiert.
Docker-Maschine Version 0.4.1
Docker Version 1.8.1

@csokun @ miracle-in-sunday @narqo Im Allgemeinen wird davon ausgegangen, dass Sie mit --url "Ihre eigenen Zertifikate mitbringen", obwohl ich zugeben muss, dass dieser Teil des Codes nachgelassen hat, sodass er möglicherweise beschädigt wird.

Wenn Sie möchten, dass Zertifikate und Schlüssel automatisch generiert werden, versuchen Sie den Treiber generic : https://docs.docker.com/machine/drivers/generic/

Wenn dies für Ihren Anwendungsfall nicht funktioniert, kann ich Sie bitten, ein separates Problem einzureichen, in dem die genauen Schritte und die angezeigten Ergebnisse aufgeführt sind.

Vielen Dank!

Hallo Leute, habt ihr es mit --virtualbox-hostonly-cidr speciefied versucht? Arbeitete für mich:

BartSlaman @ VLRNB176 ~
$ docker-machine create -d virtualbox --virtualbox-hostonly-cidr "192.168.99.100/24" dev4
Erstellen einer VirtualBox-VM ...
SSH-Schlüssel erstellen ...
Starten von VirtualBox VM ...
Starten der VM ...
Führen Sie Folgendes aus, um zu sehen, wie Docker mit diesem Computer verbunden wird: C: \ Programme (x86) \ Git \ bindocker-machine env dev4

BartSlaman @ VLRNB176 ~
$ docker-machine env dev4
export DOCKER_TLS_VERIFY = "1"
export DOCKER_HOST = " tcp: //192.168.99.101 : 2376"
export DOCKER_CERT_PATH = "C: \ Benutzer \ BartSlaman.docker \ Maschine \ Maschinen \ dev4"
export DOCKER_MACHINE_NAME = "dev4"

Grüße
Bart Slaman

Gibt es ein Update zu diesem Thema? Ich habe versucht --url mit --tls- *, aber ich habe err "open /Users/user/.docker/machine/machine/ss/ca.pem keine solche Datei oder Verzeichnis". Ich benutze Docker-Maschine Version 0.4.1

Gleich hier, aber anderer Fehler beim Erstellen:

SSH-Schlüssel importieren ...
SSH cmd Fehler!
Befehl: sudo Hostname intern && echo "intern" | sudo tee / etc / hostname
err: Status beenden 1
Ausgabe: sudo: kein tty vorhanden und kein Askpass-Programm angegeben

Und dann, wenn eval "$ (docker-machine env internal)" ausgeführt wird:
Öffnen Sie /Users/marlon/.docker/machine/machines/internal/ca.pem: Keine solche Datei oder kein solches Verzeichnis

Das heißt, die Zertifikate werden nicht generiert.

Lustige Sache, ich kann ssh auf die Maschine laufen "Docker-Maschine ssh intern".

Ich konnte --url zum Laufen bringen und auf eine vorhandene Docker-Engine auf DigitalOcean verweisen, die mit Docker Machine erstellt wurde.

Um --url oder den none -Treiber zu verwenden, habe ich einfach den vorhandenen Ordner ~/.docker/machine/machines/dobox/ auf den Computer kopiert, auf dem ich den Host erstellt habe, und cert.pem , key.pem gelöscht id_rsa.pub , id_rsa und config.json ( ca.pem , server.pem und server-key.pem ). Ich habe dann ein neues Client-Zertifikat / Schlüssel-Paar (https://docs.docker.com/articles/https/, beginnend mit "Für Client-Authentifizierung") in dem neu erstellten Verzeichnis von zuvor generiert und es auf den Computer kopiert, auf dem ich war versuchen, eine Verbindung herzustellen. Zuletzt habe ich den Remote-Host mit docker-machine create --url=tcp://SOME_IP:2376 dobox hinzugefügt und die Zertifikate an die Stelle verschoben, an der Docker Machine sie erwartet: ~/.docker/machine/machines/dobox/ . Der Ordner sollte bereits vorhanden sein und config.json , sodass Sie nur Ihre Zertifikate hinzufügen. Ich versuche nicht, das von Docker verwendete TLS-Flags / Auth-Schema zu ändern:

--tlsverify \
--tlscacert="/home/roberto/.docker/machine/machines/dobox/ca.pem" \
--tlscert="/home/roberto/.docker/machine/machines/dobox/cert.pem" \
--tlskey="/home/roberto/.docker/machine/machines/dobox/key.pem" \
-H=tcp://SOME_IP:2376

Jetzt kann ich docker $(docker-machine config dobox) images oder nur eval "$(docker-machine env dobox)" usw. auf dem zweiten Client-Computer.

Docker-Maschine Version 0.4.0
Docker Version 1.8.2

So authentifizieren Sie Client und Server in Docker. Wessen Benutzername und Passwort muss ich damit konfigurieren
Ich verwende https://docs.docker.com/reference/api/docker_remote_api_v1.20/
und Docker-Client und -Server auf demselben Host-Computer haben.
Und lassen Sie mich auch wissen, wenn sich nicht beide auf derselben Maschine befinden.

Leute, um Gottes willen, füge ein Tutorial hinzu, wie man vorhandene Docker-Maschinen importiert.
Ich habe 2 verschiedene Cloud-Azure-Computer aus 2 getrennten PCs erstellt und kann jetzt keine Verbindung zwischen PC und Azure-Computer herstellen, die auf einem anderen Computer erstellt wurden.
Verbringen Sie bereits 2 Abende und probieren Sie alle Vorschläge und kein Ergebnis aus.

@ Nathanleclaire wdyt?

@ dmp42 Worüber genau? --url kaputt zu sein ist ein ziemlich bekanntes Problem, und wir möchten die Verwendung von Maschinen von mehreren verschiedenen Computern bald mit tragbaren Konfigurationen unterstützen.

Ich nehme an, es wäre großartig, zumindest eine klare Aussage darüber zu haben, dass der Import vorhandener Hosts von PC zu PC derzeit in der offiziellen Dokumentation oder hier auf Github nicht funktioniert (oder einige bekannte Probleme aufweist).

@baio +1

Ich habe einen Centos 7-Host, auf dem ich bereits das Standard-Docker-Paket aus dem Standard-Centos-Repo installiert habe - dh ich habe das Paket von der Docker-Website nicht verwendet.

Wenn ich von meiner lokalen Workstation aus versuche, den Computer für diesen Centos 7-Host mithilfe des generischen Treibers zu erstellen, schlägt dies mit "Exit-Status 1" fehl, wenn versucht wird, ein Paket namens "Docker-Engine" zu installieren.

Ich vermute, das funktioniert nicht, wenn Docker bereits auf dem Remote-Host installiert ist.

Verwandte: # 2270

Ich glaube, ich habe ein minimal reproduzierbares Beispiel:

Erstellen Sie eine einfache Vagrant-Datei

VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|

  # Box
  config.vm.box = "ubuntu/precise64"
  config.vm.box_url = "http://cloud-images.ubuntu.com/vagrant/precise/current/precise-server-cloudimg-amd64-vagrant-disk1.box"

  # To make this easily reproducible
  config.ssh.insert_key = false
  config.vm.network "private_network", ip: "192.168.50.4"

end

Starten Sie die VM

$ vagrant up

Bestätigen Sie, dass Sie SSH mit dem Schlüssel, Benutzer und der IP-Adresse ausführen können, die Sie erwarten

ssh -i ~/.vagrant.d/insecure_private_key [email protected]

^ Das funktioniert bei mir

Erstellen Sie die Docker-Maschine

$ docker-machine create -d generic --generic-ssh-user vagrant --generic-ssh-key ~/.vagrant.d/insecure_private_key --generic-ip-address 192.168.50.4 repro

Importing SSH key...
Error creating machine: Maximum number of retries (60) exceeded
You will want to check the provider to make sure the machine and associated resources were properly removed.

Bekommt ihr das gleiche Ergebnis? Lassen Sie mich wissen, wenn ich noch etwas versuchen kann, um beim Debuggen zu helfen.

Gleiches Problem hier. --url (kein Treiber) kann nicht verwendet werden mit:

  • Docker Machine 0.5.1 (clientseitig) unter OSX
  • Docker 1.9 (Remote-Server-Seite)
  • Der Remote-Daemon begann mit:
--tlsverify -H=unix:///var/run/docker.sock -H=0.0.0.0:2376 --tlscacert=/root/.docker/ca.pem --tlscert=/root/.docker/cert.pem --tlskey=/root/.docker/key.pem
  • Client-Zertifikate (ca, Schlüssel, Zertifikat) werden unter ~/.docker/machine/machines/mymachine/ installiert

Wenn Sie docker-machine env mymachine eingeben, schlägt Folgendes fehl:

Error running connection boilerplate: Error checking and/or regenerating the certs: There was an error validating certificates for host "": open /Users/f2i/.docker/machine/machines/anakin/server.pem: no such file or directory
You can attempt to regenerate them using 'docker-machine regenerate-certs name'.
Be advised that this will trigger a Docker daemon restart which will stop running containers.

Ohne Docker-Maschine scheint alles in Ordnung zu sein:

> docker --tlsverify -H=myhost:2376 ps
CONTAINER ID        IMAGE                       COMMAND                  CREATED             STATUS              PORTS 

Ich frage mich nur, was ist der wirkliche Unterschied zwischen generischen ( --driver "generic" --generic-ip-address ... ) und keinem Treiber ( --driver "none" --url ...) ?
Ich verstehe die generischen Verbindungen über SSH (es ist also so, als würde Docker direkt auf dem Remote-Server verwendet) und kein Treiber stellt über TCP eine Verbindung zum Host her.

Wenn wir keinen Treiber verwenden , warum müssen wir server.pem und server-key.pem auf dem Client-Host haben? Sie sollten nicht maschinell verwaltet werden. Recht ?

Selbst wenn diese letzten PEM-Dateien bereitgestellt werden, schlägt Folgendes fehl:

Error running connection boilerplate: Error checking and/or regenerating the certs: There was an error validating certificates for host "": crypto/tls: failed to parse private key
You can attempt to regenerate them using 'docker-machine regenerate-certs name'.
Be advised that this will trigger a Docker daemon restart which will stop running containers.

Der "kein Treiber" ist eher ein Integrationstesttreiber, der für die Entwicklung verwendet wird. Wenn Sie jedoch genug hacken, können Sie mit Ihrem Setup einen vorhandenen Computer registrieren. Es ist geplant, in einer zukünftigen Version (# 2437) entfernt zu werden. Die aktuelle Dokumentation zu diesem none -Treiber ist irreführend.

Der generic -Treiber sollte verwendet werden, um Docker auf einem beliebigen Host zu registrieren und ordnungsgemäß zu installieren.
Beachten Sie, dass der Docker-Daemon auf dem Zielhost mindestens neu gestartet wird. Es ist jedoch eine zuverlässige Möglichkeit, einen "generischen" Computer auf einem Docker-Computer zu registrieren, solange Sie einen SSH-Zugriff gewähren.

@jeanlaurent Das Problem mit dem generic -Treiber ist, dass er mit Ihrem Computer kaputt geht, wenn Docker bereits installiert ist (z. B. Ändern des Hostnamens; Ausführen von yum update ). Ich denke, was viele von uns sagen wollen, ist, dass der none -Treiber einen erstklassigen Anwendungsfall hat, und wenn er richtig funktioniert, wäre dies für viele von uns eine wertvolle Fähigkeit (zusätzlich zu den Zieltreibern). .

Stimmen Sie @metasim zu. Der none -Treiber ist ein so häufiger Anwendungsfall. Dies ist eine der grundlegendsten Möglichkeiten zur Interaktion mit der Remote-Docker-API. Es wäre unglücklich, es test . Peraphs die Irreführung kommt von der Tatsache, dass wir keine neue Maschine erstellen / verwalten wollen ( docker-machine create ), sondern nur eine Verbindung zu einer vorhandenen Maschine herstellen wollen ...

Ich sage nicht, dass wir nicht in der Lage sein sollten, vorhandene Maschinen auf die eine oder andere Weise in Docker-Maschinen zu "registrieren", wir müssen es nur richtig machen. Es gibt viel Verwirrung um den none -Treiber, er funktioniert an vielen Orten nicht und die Leute missbrauchen ihn. Die Absicht hier ist es, den Boden für ein echtes register existing machine -Feature vorzubereiten.

Aber sobald eine Maschine durch den Treiber none in die Docker-Maschine 'gehackt' wird, gibt es eine Menge Dinge, die die Kette durchbrechen werden -> restart , upgrade und ssh offensichtlich. Das manuelle Ändern der JSON-Datei ist genauso effizient wie das Verwenden des Treibers none , um einen Computer tatsächlich zu registrieren.

@metasim Ein Upgrade des generic , um nicht mit Ihrer Maschine zu arbeiten, ist eine Möglichkeit, damit umzugehen.

@vpusher Möglicherweise müssen wir eine geeignete Registerfunktion entwerfen.

@jeanlaurent Danke für deine Antwort. Ich kann sehen, dass ein Upgrade von generic für diesen Anwendungsfall (einschließlich vorhandener Schlüssel) ein guter Weg sein kann. Im Sinne der "Trennung von Bedenken" würde ich jedoch empfehlen, einen neuen Treiber in Betracht zu ziehen ( existing ?, preconfig ?, manual ?, diy ? :-)), um diesen Anwendungsfall zu behandeln, insbesondere damit die Stabilität in diesem engen Kontext besser hergestellt werden kann.

Zu Ihrer Information. # 2260 und # 2269 (geschlossen, aber nicht wirklich angesprochen) waren ein Versuch, einen Teil dieser Verwirrung um den none -Treiber einzufangen

PS: Ich denke, es ist völlig akzeptabel, dass einige Befehle in diesem Anwendungsfall explizit nicht unterstützt werden (z. B. restart , upgrade usw.).

@metasim Ja, ein dedizierter Treiber ist wahrscheinlich der beste Weg, um eine Registerfunktion tatsächlich zu handhaben, aber nicht der einzige, ein dedizierter Befehl ist ein anderer. Bevor wir jedoch entscheiden, wie es gemacht werden soll, müssen wir klären / definieren, in welchem ​​Fall wir alle einen neuen Computer registrieren müssen, ohne dass docker-machine Docker darauf installiert.

Wenn Sie sich zum Beispiel PR # 2442 ansehen, pingen wir den Docker-Host für die Docker-Version an. Weil wir irgendwann ein Upgrade bereitstellen oder Sie warnen möchten, dass Ihr Docker-Host mit Ihrem aktuellen Docker-Client zu alt ist. Mit einer Maschine, auf der wir den Docker-Daemon nicht installiert haben, wird dies schwierig oder zumindest sehr schuppig.

Wenn wir bedenken, dass wir den generic -Treiber auf irgendeine Weise aktualisieren können, frage ich mich, für welchen Anwendungsfall jemand eine Maschine bei Docker-Maschine registrieren möchte, ohne SSH-Zugriff bereitzustellen?

Welches ist deins ? Lassen Sie uns sie auflisten.

Einige Kommentare zum Definieren des Anwendungsfalls für none und / oder möglicherweise zum Verwerfen hier: https://github.com/docker/machine/pull/2437#issuecomment -160768813

Mein Gefühl ist, dass wir (das Maschinenteam):

  • Befolgen Sie die bestehenden Docker-Richtlinien zur Ablehnung von Funktionen (über 2 Release-Zyklen hinweg veraltet).
  • Wenn wir den Treiber none verwerfen wollen, sollten wir daher warten, bis er vollständig entfernt ist, bis 0.7.0.
  • Beheben Sie in der Zwischenzeit die vorhandenen Show-Stopper-Fehler mit dem Treiber none und arbeiten Sie daran, den idealen zukünftigen Workflow zu definieren (unabhängig davon, ob es sich um import / register oder um Änderungen am generic Treiber), damit interessierte Benutzer mitmachen und ausreichend Zeit haben, sich auf Änderungen vorzubereiten, die in Kürze eintreten werden.

@dgageot @jeanlaurent Wie klingt das?

@jeanlaurent Ich kann sehen, dass ssh so ziemlich erforderlich wäre, was nicht so schlimm ist. Bisher hatte ich nur angenommen, dass fast alles über die REST-API erledigt werden kann.

Ich benutze docker-machine hauptsächlich als Tool, um die env-Variablen einzurichten, die erforderlich sind, damit docker mit einem anderen Host spricht. Ich benutze niemals die Befehle upgrade / restart usw. Meine Docker-Hosts befinden sich in vSphere mit einer benutzerdefinierten Vorlage, die über einen vOrchestrator-Workflow erstellt wurde. Die Verwendung des vSphere-Treibers in Docker-Computer ist keine Option.

Trotzdem ist mir klar, dass mein Anwendungsfall nicht der einzige Anwendungsfall ist, aber ich hoffe, dass es zumindest etwas zu beachten ist.

Ich könnte wahrscheinlich docker-machine durch einen Shell-Alias ​​ersetzen, zumindest für meine Zwecke.

Hier ist ein Anwendungsbeispiel für den Fall, dass es hilft:

Ich möchte meine ec2-Maschinen in Amazon mit elastischem Bohnenstiel anstelle von Docker-Maschine erstellen, da elastischer Bohnenstiel viele Extras enthält (wie automatische Skalierung und Neustart der Maschine). Ich möchte diese bei Docker-Maschine registrieren und mit Docker-Schwarm steuern.

Das Upgrade dieser Maschinen auf Docker 1.9 ist trivial, aber sie verwenden Amazon Linux (alte Centos-Gabel) und Generika funktionieren nicht mit ihnen. Da die Docker-Engine dort keine tls hat, besteht der Trick, den ich verwende, um sie mit einem einfachen Docker remote zu verwalten, darin, die docker.sock in localhost: 2375 mithilfe von socat verfügbar zu machen (ähnlich wie in https://github.com/sequenceiq/docker- socat) und mache einen ssh-Tunnel von meinem lokalen Computer mit so etwas wie ssh -i id_rsa [email protected] -L 2375: localhost: 2375 -N. Dann kann ich mit Docker --tls = false -H tcp: // localhost : 2375 eine Verbindung über das Netzwerk herstellen.

Es ist viel Gymnastik. Die Kombination aus SSH-Zugriff und einem funktionierenden Docker-Setup (auch ohne SSL) sollte alles sein, was Docker-Maschine für viele interessante Fälle benötigt (kein Upgrade, Neustart wie andere bemerkt, aber ich benutze diese sowieso nie).

Hoffe das ist nützlich.

@bonitao Ich bin froh, dass du das geschrieben hast. Ich habe auch den Anwendungsfall "Tunnel durch SSH" in einigen Unternehmenseinsätzen.

Ich fange gerade wieder an, Docker-Rechner mit vorhandenen Hosts zu verwenden ... Ich stimme den @ metasim- Aussagen zum none -Treiber zu ... Er hat heute Wert für die Community, seit dem generic tut noch nicht, was seine Absicht ist ... Ich habe unzählige Stunden damit verbracht, die none zum Laufen zu bringen, um zu erfahren, dass es einen Vorschlag gibt, sie in test umzubenennen. @nathanleclaire Irgendwelche Pläne, den generic Treiber wie beschrieben funktionieren zu lassen ???

Ich habe viel Zeit auf https://github.com/docker/machine/issues/2628 verbracht und dies ist ein Anwendungsfall, den wir haben ... Unterstützung bestehender Teams im gesamten Unternehmen mit Docker ...

Ich habe gegoogelt, vorausgesetzt, mir fehlte das Verständnis, und ich habe versucht herauszufinden, wie ich von meinem CI-Server, den ich an anderer Stelle erstellt habe, eine Verbindung zu einem Azure Docker-Computer herstellen kann. Ich bin hier gelandet und bin überrascht, dass dies tatsächlich nicht möglich ist (ohne Hackery).

Ich habe Azure Docker-Computerinstanzen erstellt und vollständig von einer Workstation aus ausgeführt und möchte sie nur steuern und über CI-Skripts bereitstellen können, die von einer Reihe von CI-Slave-Instanzen ausgeführt werden können. Gibt es wirklich keinen offiziellen Weg, wie dies erreicht werden soll?

Ich habe mein Docker aktualisiert und kann jetzt keine Verbindung mehr zu meiner alten Docker-Maschineninstanz herstellen. Ich bekomme

Error running connection boilerplate: Error checking and/or regenerating the certs: There was an error validating certificates for host "xxxxx:2376": open : no such file or directory
You can attempt to regenerate them using 'docker-machine regenerate-certs [name]'.
Be advised that this will trigger a Docker daemon restart which will stop running containers.

Die Befehle regeenrate-certs geben mir

Regenerate TLS machine certs?  Warning: this is irreversible. (y/n): y
Regenerating TLS certificates
Detecting the provisioner...
Installing Docker...
Copying certs to the local machine directory...
Copying ca.pem to machine dir failed: open : no such file or directory

Lustige Sache ist, dass ich kann

docker-machine ssh

ohne Probleme..

irgendwelche Korrekturen?

Szenario: Vorhandener und funktionierender Server mit aktiviertem Docker und TLS.

Fügen Sie einen vorhandenen Server / Computer zum Docker-Computer hinzu:

docker-machine --tls-ca-cert path/to/ca.pem --tls-ca-key path/to/ca-key.pem --tls-client-cert path/to/client.pem --tls-client-key path/to/client-key.pem create --driver none --url tcp://HOST:2376 NAME

Fügen Sie in Ihrem Benutzerverzeichnis (~ / .docker / machine / machine / NAME) dasselbe Clientzertifikat wie "cert.pem" und "server.pem" und den Clientzertifikatsschlüssel als "key.pem" und "server-key" hinzu. pem "Passen Sie auch Ihre config.json an, um die relevanten SSH-Einstellungen einzuschließen ...

Ich hatte dieses Problem angesprochen. Ich habe dies kürzlich zum Laufen gebracht und die Anweisungen hier (https://sreeninet.wordpress.com/2015/05/31/docker-machine/) für den Fall, dass jemand darauf verweisen möchte, veröffentlicht.

Hier ist ein Skript, das irgendwie für mich funktioniert:
https://github.com/docker/machine/issues/3344#issuecomment -212536797

@devcrust wo genau sind die:

path/to/ca.pem
path/to/ca-key.pem
path/to/client.pem
path/to/client-key.pem

???

$ ls certs/
ca-key.pem  ca.pem  cert.pem  key.pem
$ ls machines/adhoc/
ca.pem  cert.pem  config.json  id_rsa  id_rsa.pub  key.pem  server-key.pem  server.pem

Ich kann es nicht richtig einrichten. Ich habe auch dieses Problem:

Copying ca.pem to machine dir failed: open : no such file or directory

Nach dem Upgrade auf 0.6.0 .... habe ich den TCP-Zugriff auf 12 Computer verloren

@ Nathanleclaire Gibt es ein Update dazu? Ich versuche herauszufinden, wie ich mit docker-machine eine Verbindung zu einem Docker-Host in Microsoft Azure herstellen würde, den ich von einem anderen Computer aus erstellt habe. Im Moment habe ich keine Lösungen.

Lösung: _ (Sie wünschen) _

Docker-Maschine <🖥️ Name> hinzufügen - Treiber <☁️️ Provider Treiber>

So traurig, dass so viel Zeit vergangen ist und immer noch keine Funktion eingeführt wurde, um dieses Problem zu lösen.

Für was es wert ist. Sie können einen Computer mit dem generischen Treiber erstellen, aber dadurch werden alle Ihre Container neu gestartet.
Neustart hinzufügen: Immer auf Ihren Containern wird garantiert, dass sie nicht anhalten. Ich würde die Docker-Maschine hinzufügen Option

Ich bin auch ein Spiel für eine Docker-Maschine-Add-Option.

Hier sind zwei Projekte mit unterschiedlichen Ansätzen für die gemeinsame Nutzung von Maschinen:

@ Jeanlaurent

Welches ist deins ? Lassen Sie uns sie auflisten.

Meine Idee war es, meinen lokalen Computer mit einer Menge laufender Container an einen vorhandenen physischen Server anzuschließen. Wenn Sie docker-machine create --driver generic tun, werden sie höchstwahrscheinlich gestoppt und vieles mehr . Ich frage mich, warum Docker neu gestartet werden muss ...

Nun, ich kann einfach Befehle über ssh ausführen, aber nach der Beschreibung sah es so aus, als könnte auch docker-machine verwendet werden.

Aber dann, wenn Sie eine VM von einem Computer aus erstellt haben und sie von einem anderen aus verwalten möchten. Oder Sie haben Ihr lokales Betriebssystem neu installiert ... Oder möchten die Kontrolle über die VM an eine andere Person delegieren ...

PS Ich mache meine ersten Schritte mit Docker, daher fehlen mir möglicherweise Punkte ...

@ x-yuri Um eine Maschine manuell zu "erstellen", kopieren Sie einfach ihre Dateien von .docker/machine/machines und passen Sie ihre Pfade an.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen