WSL2 設定 Docker In Docker

🚀 使用主機的 Docker Socket

建立 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
}

執行命令時掛載 docker.sock

1
docker run -v /var/run/docker.sock:/var/run/docker.sock -ti [Docker 映像檔]

透過 Curl 執行 Docker Socket 建立 Containers

1
curl -XPOST --unix-socket /var/run/docker.sock -d '{"Image":"[Docker 映像檔]"}' -H 'Content-Type: application/json' http://localhost/containers/create

透過 Curl 執行 Docker Socket 啟動 Containers

1
curl -XPOST --unix-socket /var/run/docker.sock http://localhost/containers/[容器編號]/start

🚀 使用 docker:dind 映像

可參考以下兩種方法運行 docker:dind 映像

特權模式選項: --privileged

1
docker run -p [本機連接Port]:2375 --privileged -e DOCKER_TLS_CERTDIR="" --name privileged-docker -d docker:dind

安裝 Nestybox Sysbox 後,不需要特權模式,即可執行

運行時選項: --runtime=sysbox-runc

1
docker run -p [本機連接Port]:2375 -e DOCKER_TLS_CERTDIR="" --runtime=sysbox-runc --name sysbox-docker -d docker:dind

🚀 透過 Docker contexts 連線至 Docker In Docker 執行 Docker 命令

1
2
3
4
5
# 建立 Docker contexts
docker context create test --docker "host=tcp://127.0.0.1:[本機連接Port]"

# 使用 Docker contexts
docker context use test