Windows

您可以在新的 Windows 10 (Ubuntu) bash 使用者空間上本地執行 Docker 嗎?

  • August 17, 2019

我的理解是,在其他作業系統上執行 docker 的主要限制是使其成為可能的 Linux 網路容器。(當然適用於 Mac)。

最近,微軟宣布了一個在 Windows 10 上原生執行的Ubuntu linux使用者模式的測試版。這可以在 Windows 上執行以 ELF 格式編譯的二進製文件(與需要編譯的 cygwin 不同。)

我的問題是:你能在新的 Windows 10 (Ubuntu) bash 使用者空間上本地執行 Docker 嗎?

在 Windows 上的 Ubuntu / Debian 上,您可以使用 Docker Desktop for Windows 作為引擎,將 Docker for Linux 作為客戶端。通過 TCP 連接它們。

為 Windows 安裝 Docker 桌面:https ://hub.docker.com/editions/community/docker-ce-desktop-windows 如果你想使用 Windows 容器而不是 Linux 容器,這兩種類型的容器都可以由 Linux docker 客戶端在bash 使用者空間。

從版本 17.03.1-ce-win12 (12058) 開始,您必須選中Expose daemon on tcp://localhost:2375 without TLS以允許 Linux Docker 客戶端繼續通過 TCP 與 Windows Docker 守護程序通信

跟著這些步驟:

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

或者

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

使其永久化:

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

將對應的變數添加到.bashrc

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

當然也可以安裝 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

或者使用 python pip

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

和 Bash 完成。最好的部分:

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

我已經使用 Hyper-V 使用 Docker Desktop 的 2.1.0.1 (37199) 版本對其進行了測試:

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

添加卷時要小心。該路徑C:\dir/mnt/c/dir在 WSL 和/c/dir/docker 引擎上可見。您可以永久克服它:

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

對 wsl.conf 進行更改後,您必須退出並重新載入 WSL,以便 WSL 在啟動時讀取您的更改。

更新

來自:Windows 10 版本 1803 中命令行的新增功能

Unix 套接字 Windows 不支持 Unix 套接字,現在支持了!您還可以通過 Unix 套接字在 Windows 和 WSL 之間進行通信。這樣做的好處之一是它使 WSL 能夠執行 Linux Docker 客戶端以與在 Windows 上執行的 Docker 守護程序進行互動。

更新

該腳本和 Unix 套接字的使用包含在Pengwin的 pengwin-setup 中。

問候

引用自:https://serverfault.com/questions/767994