Chạy Docker trong môi trường Windows / cygwin


8

Tôi không chắc đây có phải là cộng đồng phù hợp để hỏi về vấn đề của tôi không vì tôi thực sự đang cố gắng khởi chạy dockertrong cygwinmôi trường windows. Sau khi cài đặt Docker Toolbox, tôi đang cố gắng khởi chạy docker versiontrong shell cygwin của mình và nhận được:

$ 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.

Tuy nhiên, tệp thực tế /cygdrive/c/Users/Alexey/.docker/machine/machines/default/ca.pem nằm ở đó, vấn đề dường như nằm ở dấu gạch chéo (windows vs UNIX) trong đường dẫn đến tệp chứng chỉ. Nhưng tôi không thể tìm ra nơi để sửa nó.

Dưới đây là các biến env được đặt trong ~ / .bash_profile:

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

CẬP NHẬT

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.

GIẢI PHÁP như được đề xuất dưới đây bởi @cloverhap, chúng ta cần đặt DOCKER_CERT_PATHbiến môi trường, nhưng nó phải chứa đường dẫn windows, không phải cygwin và hơn nữa, dấu gạch chéo ngược phải được thoát, vì vậy giải pháp là thêm điều này:

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

đến .bash_profile


2
Docker sẽ chỉ làm việc trong Linux vì nó thúc đẩy Linux kernel tính năng ( cgroups, lxc, vv).
jordanm

1
@jordanm: tại sao lại có phiên bản windows? Điểm phát hành nó là gì?
Alexey

Tôi thấy, họ đã thay thế boot2dockerbằng một hệ thống cho phép dockerlệnh phía máy khách bật Windows. Các dockerdaemon và VM chạy trong một máy ảo Linux.
jordanm

có lẽ, tôi không chắc chắn Nhưng câu hỏi vẫn còn bỏ ngỏ: có một vấn đề với cygwin và trình phân tách thư mục trong windows
Alexey

1
Như một bản cập nhật cho bất cứ ai đi ngang qua câu hỏi này, tôi đã cài đặt Docker trên Windows 10 trong tuần này và nó làm việc (ví dụ docker version, docker run hello-world, docker run -d -p 80:80 --name webserver nginx) trong Cygwin ra khỏi hộp.
dimo414

Câu trả lời:


7

Trên môi trường cygwin của tôi, đường dẫn chứng chỉ docker thực sự được đặt như bên dưới và docker dường như hoạt động tốt.

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

Điều sau đây thực sự gây ra lỗi

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.

Vì vậy, hãy thử thay đổi DOCKER_CERT_PATH của bạn sang định dạng đường dẫn Windows thông thường.

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

Phiên bản docker của tôi là 1.10.1, nếu kết quả khác nhau.


Cảm ơn câu trả lời của bạn, nhưng ngay cả khi tôi cố gắng khởi chạy nó với phiên bản ENV có thể sửa đổi được lệnh: DOCKER_CERT_PATH = / cygdrive / c / Users / Alexey / .docker / machine / machine / default / docker phiên bản vẫn có thể cho tôi không đọc chứng chỉ CA "\\ cygdrive \\ c \\ Users \\ Alexey \\. docker \\ machine \\ machine \\ default \\ ca.pem": open \ cygdrive \ c \ Users \ Alexey \ .docker \ machine \ Machines \ default \ ca.pem: Hệ thống không thể tìm thấy đường dẫn được chỉ định.
Alexey

Lệnh mà tôi muốn chỉ ra là dòng đầu tiên export DOCKER_CERT_PATH=C:\Users\user\.docker\machine\machines\default, bạn đã thử nó chưa?
cloverhap

vâng, tôi cũng đã làm điều đó trước lệnh tôi đã đề cập ở trên. Và AFAIK, những gì tôi đã làm là đặt biến env chỉ cho lệnh đó. Xem cập nhật trong câu hỏi của tôi.
Alexey

những gì bạn muốn làm là KHÔNG sử dụng /cygdrive/c/Users/Alexey/.docker/machine/machines/default/làm đường dẫn, nhưng định dạng cửa sổC:\Users\Alexey\.docker\machine\machines\default
cloverhap

Cảm ơn, nó đã hoạt động với một sửa đổi nhỏ (tôi không chắc tại sao tôi không nhận thấy đường dẫn kiểu win của bạn và sử dụng đường dẫn * nix và cygwin thay thế). Xem câu hỏi cập nhật của tôi
Alexey

0

Tôi gặp vấn đề tương tự, sau đó tôi nhận ra rằng khi tôi cài đặt docker trên hệ thống Windows 10 của mình, một chương trình có tên là "Docker Quickstart Terminal" đã được cài đặt. Nếu bạn chạy nó nếu đưa ra một bash shell và bạn có thể chạy lệnh docker của mình trong terminal đó. Nó có thể không phải là bash của Cygwin nhưng vậy thì sao?

nhập mô tả hình ảnh ở đây

Điều đó ra mắt điều này

nhập mô tả hình ảnh ở đây


Đối với những người quan tâm: trang Docker Desktop cho Windows có ghi " Yêu cầu Microsoft Windows 10 Professional hoặc Enterprise 64-bit. Đối với các phiên bản trước, hãy lấy Docker Toolbox . "
Paul van Leeuwen

0

Không có giải pháp nào được chỉ ra ở đây làm việc cho tôi. Tôi phát hiện ra rằng ngay cả khi sử dụng Cywin, bạn phải định cấu hình proxy vào GUI của Docker Desktop: nhập mô tả hình ảnh ở đây

Sau đó tôi đã có thể chạy:

$ 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/
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.