WSL2 開放 Docker 外部連線

🚀 開放外部連線至 Docker,有兩種方式可擇一設定

建立 ‘/etc/docker/daemon.json’

1
sudo nano /etc/docker/daemon.json

加入以下設定

1
2
3
4
{
"hosts": [ "unix:///var/run/docker.sock", "tcp://0.0.0.0:" ],
"tls": false
}

調整服務

1
sudo systemctl edit docker.service

服務指令結尾加入參數 [-H tcp://127.0.0.1:2375]

1
2
3
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd -H fd:// -H tcp://127.0.0.1:2375

重啟服務

1
2
sudo systemctl daemon-reload
sudo systemctl restart docker.service

🚀 確認 docker 連線 *:2375是否存在

1
ss -peanut | grep :2375

🚀 使用 Chocolatey 安裝 Docker CLI

1
choco install docker-cli

🚀 設定主機連線有兩種方式

1
[Environment]::SetEnvironmentVariable('DOCKER_HOST', "tcp://$($wslip):2375", 'User')
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 取得 WSL 的 IP 位置
$wslip = wsl -- ip -o -4 -json addr list eth0 `
| ConvertFrom-Json `
| %{ $_.addr_info.local } `
| ?{ $_ }

Write-Host "Setting Docker context 'wsl' to host=tcp://$($wslip):2375"

# 建立 context
docker context create wsl --docker "host=tcp://$($wslip):2375"

# 更新 context
docker context update wsl --docker "host=tcp://$($wslip):2375"

# 使用 context
docker context use wsl

docker --context wsl ps

# 顯示目前設定的 context
docker context ls --format="{{json .}}"

🚀 測試 Docker 命令

取得 WSL 的 IP 位置

1
2
3
4
$wslip = wsl -- ip -o -4 -json addr list eth0 `
| ConvertFrom-Json `
| %{ $_.addr_info.local } `
| ?{ $_ }

執行 Docker

1
docker -H $wslip ps

🚀 登入 wsl 自動啟動 Docker

修改/etc/profile

1
sudo nano /etc/profile

加入以下設定

1
2
export DOCKER_HOST="tcp://127.0.0.1:2375"
sudo service docker start

⚠️請注意,下方設定不建議用在生產環境

無密碼 sudo 授權

修改/etc/sudoers

1
sudo nano /etc/sudoers

加入以下設定

1
%ubuntu ALL=(ALL:ALL) NOPASSWD:ALL