Ausführen von Docker unter Windows / Cygwin-Umgebung

8

Ich bin mir nicht sicher, ob dies die richtige Community ist, um nach meinem Problem zu fragen, da ich tatsächlich versuche, dockerinnerhalb der cygwinUmgebung zu starten windows. Nach der Installation der Docker Toolbox versuche ich, docker versionin meiner Cygwin-Shell zu starten und Folgendes zu erhalten:

$ docker version
Could not read CA certificate "\\cygdrive\\c\\Users\\Alexey\\.docker\\machine\\machines\\default\\ca.pem": open \cygdrive\c\Users\Alexey\.docker\machine\machines\default\ca.pem: The system cannot find the path specified.

Die eigentliche Datei /cygdrive/c/Users/Alexey/.docker/machine/machines/default/ca.pem ist jedoch vorhanden. Das Problem scheint in falschen Schrägstrichen (Windows vs UNIX) im Pfad zur Zertifikatdatei zu liegen. Aber ich kann nicht herausfinden, wo ich das Problem beheben kann.

Hier sind die in ~ / .bash_profile festgelegten env-Variablen:

export DOCKER_HOST=tcp://192.168.99.100:2376
export DOCKER_MACHINE_NAME=default
export DOCKER_TLS_VERIFY=1
export DOCKER_CERT_PATH=/cygdrive/c/Users/Alexey/.docker/machine/machines/default
export TERM=cygwin

AKTUALISIEREN

Alexey@Alexey-PC ~
$ echo $DOCKER_CERT_PATH
/cygdrive/c/Users/Alexey/.docker/machine/machines/default/

Alexey@Alexey-PC ~
$ docker version
Could not read CA certificate "\\cygdrive\\c\\Users\\Alexey\\.docker\\machine\\machines\\default\\ca.pem": open \cygdrive\c\Users\Alexey\.docker\machine\machines\default\ca.pem: The system cannot find the path specified.

LÖSUNG Wie unten von @cloverhap vorgeschlagen, müssen wir die DOCKER_CERT_PATHUmgebungsvariable festlegen , aber sie sollte den Windows-Pfad enthalten, nicht Cygwin. Außerdem sollten die Backslashes maskiert werden. Die Lösung besteht darin, Folgendes hinzuzufügen:

export DOCKER_CERT_PATH=C:\\Users\\%USERNAME%\\.docker\\machine\\machines\\default

zu .bash_profile

Alexey
quelle
2
Docker funktioniert nur unter Linux , wie es Linux - Kernel - Funktionen nutzt ( cgroups, lxcusw.).
Jordan
1
@ Jordanm: Warum gibt es dann Windows-Version? Was war der Grund, es zu veröffentlichen?
Alexey
Ich sehe, sie wurden durch boot2dockerein System ersetzt, das den clientseitigen dockerBefehl aktiviert Windows. Der dockerDaemon und die VMs werden in einer virtuellen Linux-Maschine ausgeführt.
Jordan
wahrscheinlich bin ich mir nicht sicher. Aber die Frage ist noch offen: Es gibt ein Problem mit Cygwin und Verzeichnis-Trennzeichen in Windows
Alexey
1
Als Update für jemanden über diese Frage kommen, ich installierte Docker auf 10 Fenster in dieser Woche und es hat funktioniert (zB docker version, docker run hello-world, docker run -d -p 80:80 --name webserver nginx) in Cygwin aus dem Kasten heraus .
dimo414

Antworten:

7

In meiner Cygwin-Umgebung ist der Docker-Zertifizierungspfad wie folgt festgelegt, und Docker scheint einwandfrei zu funktionieren.

DOCKER_CERT_PATH=C:\Users\user\.docker\machine\machines\default

Das Folgende gibt tatsächlich einen Fehler

DOCKER_CERT_PATH=/cygdrive/c/Users/user/.docker/machine/machines/default
$ docker version
Could not read CA certificate "\\cygdrive\\c\\Users\\user\\.docker\\machine\\machines\\default\\ca.pem": open \cygdrive\c\Users\user\.docker\machine\machines\default\ca.pem: The system cannot find the path specified.

Versuchen Sie also, DOCKER_CERT_PATH in das normale Windows-Pfadformat zu ändern.

export DOCKER_CERT_PATH=C:\\Users\\Alexey\\.docker\\machine\\machines\\default

Meine Docker-Version ist 1.10.1, wenn die Ergebnisse unterschiedlich sind.

Kleeblatt
quelle
Vielen Dank für Ihre Antwort, aber selbst wenn ich versuche, sie mit der dem Befehl vorangestellten ENV veraible zu starten: DOCKER_CERT_PATH = / cygdrive / c / Users / Alexey / .docker / machine / machine / default / docker version` gibt es mir immer noch Could CA-Zertifikat "\\ cygdrive \\ c \\ Benutzer \\ Alexey \\. Docker \\ Maschine \\ Maschinen \\ Standard \\ ca.pem" nicht lesen: Öffnen Sie \ cygdrive \ c \ Benutzer \ Alexey \ .docker \ machine \ machine \ default \ ca.pem: Das System kann den angegebenen Pfad nicht finden.
Alexey
Der Befehl, auf den ich hinweisen wollte, ist die erste Zeile export DOCKER_CERT_PATH=C:\Users\user\.docker\machine\machines\default. Haben Sie das auch versucht?
Kleeblatt
Ja, das habe ich auch vor dem oben erwähnten Befehl gemacht. Und AFAIK, ich habe die env-Variable nur für diesen Befehl festgelegt. Siehe das Update in meiner Frage.
Alexey
Was Sie tun möchten, ist nicht /cygdrive/c/Users/Alexey/.docker/machine/machines/default/als Pfad zu verwenden, sondern das Windows-FormatC:\Users\Alexey\.docker\machine\machines\default
Kleeblatt
Vielen Dank, es hat mit einer geringfügigen Änderung funktioniert (ich bin mir nicht sicher, warum ich Ihren Win-Style-Pfad nicht bemerkt und stattdessen * nix- und Cygwin-Pfad verwendet habe). Siehe meine aktualisierte Frage
Alexey
0

Ich hatte das gleiche Problem und stellte fest, dass bei der Installation von Docker auf meinem Windows 10-System ein Programm namens "Docker Quickstart Terminal" installiert wurde. Wenn Sie das ausführen, gibt if eine Bash-Shell und Sie können Ihren Docker-Befehl in diesem Terminal ausführen. Es ist vielleicht nicht Cygwins Bash, aber was nun?

Geben Sie hier die Bildbeschreibung ein

Das startet das…

Geben Sie hier die Bildbeschreibung ein

Red Cricket
quelle
Für Interessenten: Auf der Seite Docker Desktop für Windows heißt es: " Erfordert Microsoft Windows 10 Professional oder Enterprise 64-Bit. Für frühere Versionen erhalten Sie die Docker Toolbox . "
Paul van Leeuwen
0

Keine der hier angegebenen Lösungen hat bei mir funktioniert. Ich habe festgestellt, dass Sie selbst mit Cywin den Proxy in der GUI von Docker Desktop konfigurieren müssen: Geben Sie hier die Bildbeschreibung ein

Danach konnte ich laufen:

$ docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
1b930d010525: Pulling fs layer
1b930d010525: Verifying Checksum
1b930d010525: Download complete
1b930d010525: Pull complete
Digest: sha256:2557e3c07ed1e38f26e389462d03ed943586f744621577a99efb77324b0fe535
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/
Fabien
quelle