tra-loi-cau-hoi-phat-trien-web.com

Bạn có thể chạy Docker tự nhiên trên không gian người dùng bash Windows 10 (Ubuntu) mới không?

Sự hiểu biết của tôi là giới hạn chính của việc chạy docker trên các HĐH khác là các thùng chứa Mạng Linux đã làm được điều đó. (Chắc chắn cho máy Mac).

Gần đây Microsoft đã thông báo bản beta của một bunt linux chế độ người dùng chạy tự nhiên trên Windows 10. Điều này có thể chạy các tệp nhị phân được biên dịch theo định dạng ELF trên Windows (không giống như cygwin đòi hỏi phải biên dịch.)

Câu hỏi của tôi là: Bạn có thể chạy Docker tự nhiên trên không gian người dùng bash Windows 10 (Ubuntu) mới không?

127
Hawkeye

Bạn có thể sử dụng Docker Desktop cho Windows làm công cụ và Docker cho Linux làm máy khách trong WSL trên Ubuntu/Debian trên Windows. Kết nối chúng qua TCP.

Cài đặt Docker Desktop cho Windows: https://hub.docker.com/editions/community/docker-ce-desktop-windows Nếu bạn muốn sử dụng Windows Container thay vì Linux Container, cả hai loại container đều có thể được quản lý bởi máy khách docker Linux trong không gian người dùng bash.

Kể từ phiên bản 17.03.1-ce-win12 (12058), bạn phải kiểm tra Hiển thị daemon trên tcp: // localhost: 2375 mà không có TLS để cho phép Docker Linux khách hàng tiếp tục liên lạc với trình nền Windows Docker bằng TCP

Thực hiện theo các bước sau:

cd
wget https://download.docker.com/linux/static/stable/`uname -m`/docker-19.03.1.tgz
tar -xzvf docker-*.tgz
cd docker
./docker -H tcp://0.0.0.0:2375 ps

hoặc là

env DOCKER_Host=tcp://0.0.0.0:2375 ./docker ps

Để làm cho nó vĩnh viễn:

mkdir ~/bin
mv ~/docker/docker ~/bin

Thêm các biến tương ứng vào .bashrc

export DOCKER_Host=tcp://0.0.0.0:2375
export PATH=$PATH:~/bin

Tất nhiên, bạn có thể cài đặt docker-compose

Sudo -i
curl -L https://github.com/docker/compose/releases/download/1.24.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose

Hoặc sử dụng python pip

Sudo apt-get install python-pip bash-completion
Sudo pip install docker-compose

Và Bash hoàn thành. Phần tốt nhất:

Sudo -i
apt-get install bash-completion
curl -L https://raw.githubusercontent.com/docker/docker-ce/master/components/cli/contrib/completion/bash/docker > /etc/bash_completion.d/docker
curl -L https://raw.githubusercontent.com/docker/compose/$(docker-compose version --short)/contrib/completion/bash/docker-compose > /etc/bash_completion.d/docker-compose

Tôi đã thử nghiệm nó bằng phiên bản 2.1.0.1 (37199) của Docker Desktop bằng Hyper-V:

$ docker version
Client: Docker Engine - Community
 Version:           19.03.1
 API version:       1.40
 Go version:        go1.12.5
 Git commit:        74b1e89e8a
 Built:             Thu Jul 25 21:17:37 2019
 OS/Arch:           linux/AMD64
 Experimental:      false

Server: Docker Engine - Community
 Engine:
  Version:          19.03.1
  API version:      1.40 (minimum version 1.12)
  Go version:       go1.12.5
  Git commit:       74b1e89
  Built:            Thu Jul 25 21:17:52 2019
  OS/Arch:          linux/AMD64
  Experimental:     false
 containerd:
  Version:          v1.2.6
  GitCommit:        894b81a4b802e4eb2a91d1ce216b8817763c29fb
 runc:
  Version:          1.0.0-rc8
  GitCommit:        425e105d5a03fabd737a126ad93d62a9eeede87f
 docker-init:
  Version:          0.18.0
  GitCommit:        fec3683
Look both client and server say **OS/Arch: linux/AMD64**

Tập

Cẩn thận khi thêm khối lượng. Con đường C:\dir sẽ hiển thị dưới dạng /mnt/c/dir trên WSL và dưới dạng /c/dir/ bởi động cơ docker. Bạn có thể khắc phục nó vĩnh viễn:

Sudo bash -c "echo -e '[automount] \nroot = /'>/etc/wsl.conf"

Bạn phải thoát và tải lại WSL sau khi thực hiện thay đổi thành wsl.conf để WSL đọc các thay đổi của bạn khi khởi chạy.

[~ # ~] cập nhật [~ # ~]

từ: Có gì mới đối với Dòng lệnh trong Windows 10 phiên bản 18

Ổ cắm Unix Ổ cắm Unix không được hỗ trợ trên Windows, và bây giờ chúng là! Bạn cũng có thể giao tiếp qua các ổ cắm Unix giữa Windows và WSL. Một trong những điều tuyệt vời ở đây là nó cho phép WSL chạy Linux Docker Client để tương tác với Docker Daemon chạy trên Windows.

[~ # ~] cập nhật [~ # ~]

Kịch bản này và việc sử dụng Unix Sockets đã được bao gồm trong Pengwin 'pengwin-setup.

Trân trọng

104
Carlos Rafael Ramirez

Tính đến thời điểm hiện tại (tháng 4 năm 2016), câu trả lời là:

Chúng tôi chưa biết (nhưng có lẽ là không).

Sự thật

  • Windows 10 hiện có thể chạy nhiều chương trình Linux (trong đó có Bash Shell và các tiện ích văn bản khác nhau). Đây không phải là các cổng (tức là các phiên bản được biên dịch lại, ví dụ như trong Cygwin ), chúng giống nhau nhị phân ELF chạy trên hệ thống Linux điển hình. Trong trường hợp này, chúng được lấy từ Ubuntu.
  • Để thực hiện điều này, Windows 10 đã được sửa đổi để chấp nhận các cuộc gọi (hệ thống tòa nhà) của Linux và để có thể tải và chạy các tệp nhị phân ELF ( bình luận của Scott Hanselman ). Điều này có nghĩa là các tệp thực thi Linux chưa được sửa đổi có thể được chạy, chúng sẽ tải các thư viện chia sẻ chưa sửa đổi của chúng theo yêu cầu và Windows sẽ chạy chúng dưới dạng các quy trình của Windows.
  • Bất cứ khi nào một chương trình Linux như vậy muốn tương tác với kernel, nó sẽ đưa ra một cuộc gọi hệ thống (hoặc cho phép một thư viện thực hiện nó). Đây có lẽ là sự khác biệt duy nhất để chạy trên Linux: Khi chạy trên Linux, nhân Linux xử lý các cuộc gọi này; trên Windows 10, nhân Windows 10 thực hiện thay thế.

Đầu cơ

Vì vậy, câu hỏi là liệu các tòa nhà cao tầng mà Docker cần (cho chroot và không gian tên, trong số những thứ khác) đã được thực hiện hay không. Câu trả lời là có khả năng là "không". Docker yêu cầu chức năng khá tinh vi (và dành riêng cho Linux) để quản lý tài nguyên và quy trình và cách ly quy trình. Mặc dù có thể sao chép tất cả những thứ này trên Windows, nhưng nó sẽ rất nhiều việc và vì mục tiêu của tính năng Windows này dường như là chạy các chương trình không gian người dùng Linux, nên có vẻ như họ không làm hết (và giữ bí mật) .

Tuy nhiên, không có thông tin chính xác nào cả, theo như tôi có thể nói.

Các cổng Docker hiện có

Tất nhiên, nếu Microsoft quyết định họ muốn hỗ trợ Docker trong Windows 10, họ có thể sẽ cung cấp nó. Có một số tiền lệ để chuyển Docker sang một kernel khác:

  • Có một Cổng Docker cho FreeBSD . Nó được dán nhãn "thử nghiệm", nhưng dường như hoạt động trên nguyên tắc. Nó có thể sử dụng các container Docker chưa sửa đổi từ kho Docker, nghĩa là nó thực sự cung cấp môi trường Host giống như Linux cho các hình ảnh.
  • Có một dự án đang được tiến hành để chuyển Docker sang Windows (cụ thể là Windows Server 2016) - hãy xem điều này mục blog của Docker từ tháng 8 năm 2015. Tuy nhiên, không giống như cổng FreBSD ở trên, đây sẽ là một cổng cho phép Docker để chạy hình ảnh Windows trên Windows, không phải hình ảnh Linux trên Windows. Cảm ơn R®ry McCune vì đã chỉ ra điều này.
51
sleske

Bản xem trước nội bộ đầu tiên đã được phát hành ngày hôm qua. Tôi đã cố gắng cài đặt docker nhưng không thành công với các điều sau: docker fail

Vì vậy, nó sẽ xuất hiện, cho lần xem trước đầu tiên, nó hiện không hoạt động. Tuy nhiên, như nhiều người đã suy đoán, nó có thể hoạt động trong một phiên bản tương lai.

13
CodedBeard

Không, điều này là không thể.

Docker cần nhiều thứ để chạy container:

  • chroot
  • Không gian tên cho: [.__.]
    • PID
    • Người dùng
    • Mạng
    • Núi
    • UTS
    • IPC

Đây là tất cả các tính năng kernel được triển khai trong Linux. Thật không may, hầu hết trong số chúng không có tính năng tương tự trong Windows để sử dụng thay thế (cũng không phải trong Hệ thống con Linux mà Microsoft triển khai trong nhân Windows). Tất cả những điều này cần được cung cấp bởi HĐH.

13
Florin Asăvoaie

Kể từ Cập nhật của người tạo (được phát hành công khai vào ngày 13 tháng 6 năm 2017), bạn có thể chạy Windows thực thi trực tiếp trong WSL. Điều này có nghĩa là nếu bạn đã cài đặt Docker cho Windows bạn có thể chỉ cần gọi các nhị phân docker được cài đặt trong C:\Program Files. Vì chúng kết thúc bằng .exe, Tùy chọn dễ nhất là tạo bí danh. Một cái gì đó như sau trong .bashrc Của bạn sẽ hoạt động:

DOCKER_BIN='/mnt/c/Program Files/Docker/Docker/resources/bin'
for f in "$DOCKER_BIN"/*; do
  alias "$(basename "$f" | sed 's/.exe$//')"'="'"$f"'"'
done

Điều này tạo bí danh cho tất cả các tệp trong thư mục DOCKER_BIN:

$ type docker
docker is aliased to `"/mnt/c/Program Files/Docker/Docker/resources/bin/docker.exe"'

$ docker --version
Docker version 17.03.1-ce, build c6d412e

Một cảnh báo: bạn sẽ nhận được thông báo lỗi như " Không thể dịch thư mục làm việc hiện tại " nếu chạy từ thư mục Linux. Chỉ cần cd vào một thư mục Windows (ví dụ: /mnt/c/Users/YourUsername) Và bạn sẽ ổn.

7
dimo414

Khi Docker 1.12 được phát hành và máy khách Docker Linux được tách ra, bạn sẽ có thể chạy docker client trong Windows 10 bash.

Điều này nghe có vẻ không giống với việc bạn có máy khách Docker Windows nhưng thật hữu ích nếu bạn có các bộ công cụ Linux bao gồm docker cho chức năng phía máy khách.

6
mixja

Trong Windows 10 Phiên bản 1607 Build 1493.10, bạn có thể cài đặt thành công trên Ubuntu Bash, nhưng nó không hoạt động: (

Một "phiên bản docker" đơn giản sẽ cho bạn biết:

Client version: 1.6.2
Client API version: 1.18
Go version (client): go1.2.1
Git commit (client): 7c8fca2
OS/Arch (client): linux/AMD64
FATA[0000] Get http:///var/run/docker.sock/v1.18/version: dial unix /var/run/docker.sock: setsockopt: invalid argument. Are you trying to connect to a TLS-enabled daemon without TLS?

Nếu sau đó bạn chạy "Sudo docker -d", bạn sẽ gặp lỗi sau:

FATA[0000] ERROR: You are running Linux kernel version 3.4.0+, which is unsupported for running Docker. Please upgrade your kernel to 3.8+.

Vì vậy, đây chắc chắn là một nút chặn từ phía bash.

Tuy nhiên, bạn có thể cài đặt Docker cho Windows và nó hoạt động như một bùa mê, rõ ràng bạn có thể triển khai Máy chủ Linux và mọi thứ bạn cần.

> docker version
Client:
 Version:      1.12.0
 API version:  1.24
 Go version:   go1.6.3
 Git commit:   8eab29e
 Built:        Thu Jul 28 21:15:28 2016
 OS/Arch:      windows/AMD64

Server:
 Version:      1.12.0
 API version:  1.24
 Go version:   go1.6.3
 Git commit:   8eab29e
 Built:        Thu Jul 28 21:15:28 2016
 OS/Arch:      linux/AMD64
4
Bruno Medina

Kể từ tháng 9 năm 2016, số.

Tất cả các triển khai hiện tại của Docker trên Windows đều sử dụng ảo hóa, Docker 1.12 sử dụng một trình ảo hóa trong Windows - vì vậy sẽ loại bỏ lợi thế của việc chứa trong quá trình ảo hóa.

Docker cần nhiều hơn là chỉ sử dụng các cuộc gọi hệ thống Linux.

Nó cần các nhóm điều khiển quá trình (cgroups), một hệ thống tập tin có thể xếp chồng (aufs), cộng với các hệ thống dựa trên Linux khác bên ngoài kernel.

Cả nhóm và auf đều không phải là nhân trong Windows 10.

Có một triển khai Windows Server 2016 tại đây: https://msdn.Microsoft.com/en-gb/virtualization/windowscontainers/quick_start/quick_start_windows_server .. nhưng điều này sẽ chỉ chạy một số dịch vụ Windows, ví dụ: IIS chứ không phải Ubuntu

3
Graham

Docker hiện không hoạt động trong bản dựng hiện tại (14316) - giả sử bạn có thể cài đặt nó.

[email protected]:~# docker --help
runtime: address space conflict: map(0x7ff5ddbb0000) = 0x7ff5ffd20000
fatal error: runtime: address space conflict
2
lgj

Từ: https://blog.docker.com/2016/07/docker-for-mac-and-windows-production- yet /

Faster and more reliable – native development environment using
hypervisors built into each operating system. (No more VirtualBox!)
1
gavenkoa