docker-desktop 中的 "host" 指的是哪里?
Where do "host" in docker-desktop refer to?
我正在尝试用 Docker API 创建一个容器。
我的环境如下:
- Windows 11(我想在 windows 10 中也应该 运行)
- Docker 桌面版
v20.10.8
选中以下设置:
- 基于 WS2 的引擎
- 在没有 TLS 的情况下在 tcp://localhost:2375 上公开守护进程
我的curl请求如下:
curl --location --request POST 'http://localhost:2375/v1.41/containers/create?name=oraumum' \
--header 'Content-Type: application/json' \
--data-raw '{
"Image": "nginx",
"Volumes": {
"/volumes/data": { }
},
"ExposedPorts": {
"80/tcp": {}
},
"HostConfig": {
"PortBindings": {
"80/tcp": [
{
"HostPort": "5000"
}
]
},
"RestartPolicy": {
"Name": "always"
},
"Mounts": [
{
"Target": "/test",
"Source": "/",
"Type": "bind",
"ReadOnly": false
}
]
}
}'
在这个实验中,我尝试将主机的/
加载到我容器中的/test
。
奇怪的是,我发现 Mount
的 Source
既不是我的 WSL 也不是 windows 机器:
docker exec -it oraumum bash
# ls
bin dev docker-entrypoint.sh home lib64 mnt proc run srv test usr volumes
boot docker-entrypoint.d etc lib media opt root sbin sys tmp var
# cd /test
# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
# ls /home
# ls -al /home
total 8
drwxr-xr-x 2 root root 4096 Jun 13 10:30 .
drwxr-xr-x 1 root root 4096 Sep 12 13:46 ..
#
这里到底发生了什么?这与 hyper-V 或其他东西有关吗?
更新: 我的 WSL2 的 home
不为空:
gofrendi@DESKTOP-MEO4ER4 [21:26:02] [/home]
-> % pwd
/home
gofrendi@DESKTOP-MEO4ER4 [21:26:07] [/home]
-> % ls -al
total 12
drwxr-xr-x 3 root root 4096 Sep 10 08:17 .
drwxr-xr-x 19 root root 4096 Sep 12 17:18 ..
drwxr-xr-x 24 gofrendi gofrendi 4096 Sep 12 21:26 gofrendi
gofrendi@DESKTOP-MEO4ER4 [21:26:12] [/home]
在这里回答我自己的问题:实际发生了什么。
当您在 docker-desktop 中激活 WSL2 后端引擎时,它将创建 2 个不同的存储(并且可能还有 2 个不同的 VM)。
除了我的默认 WSL VM(Ubuntu
那个),Docker-desktop 还创建了 docker-desktop
和 docker-desktop-data
.
安装源可能位于 docker-desktop
或 docker-desktop-data
。
我正在尝试用 Docker API 创建一个容器。
我的环境如下:
- Windows 11(我想在 windows 10 中也应该 运行)
- Docker 桌面版
v20.10.8
选中以下设置:- 基于 WS2 的引擎
- 在没有 TLS 的情况下在 tcp://localhost:2375 上公开守护进程
我的curl请求如下:
curl --location --request POST 'http://localhost:2375/v1.41/containers/create?name=oraumum' \
--header 'Content-Type: application/json' \
--data-raw '{
"Image": "nginx",
"Volumes": {
"/volumes/data": { }
},
"ExposedPorts": {
"80/tcp": {}
},
"HostConfig": {
"PortBindings": {
"80/tcp": [
{
"HostPort": "5000"
}
]
},
"RestartPolicy": {
"Name": "always"
},
"Mounts": [
{
"Target": "/test",
"Source": "/",
"Type": "bind",
"ReadOnly": false
}
]
}
}'
在这个实验中,我尝试将主机的/
加载到我容器中的/test
。
奇怪的是,我发现 Mount
的 Source
既不是我的 WSL 也不是 windows 机器:
docker exec -it oraumum bash
# ls
bin dev docker-entrypoint.sh home lib64 mnt proc run srv test usr volumes
boot docker-entrypoint.d etc lib media opt root sbin sys tmp var
# cd /test
# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
# ls /home
# ls -al /home
total 8
drwxr-xr-x 2 root root 4096 Jun 13 10:30 .
drwxr-xr-x 1 root root 4096 Sep 12 13:46 ..
#
这里到底发生了什么?这与 hyper-V 或其他东西有关吗?
更新: 我的 WSL2 的 home
不为空:
gofrendi@DESKTOP-MEO4ER4 [21:26:02] [/home]
-> % pwd
/home
gofrendi@DESKTOP-MEO4ER4 [21:26:07] [/home]
-> % ls -al
total 12
drwxr-xr-x 3 root root 4096 Sep 10 08:17 .
drwxr-xr-x 19 root root 4096 Sep 12 17:18 ..
drwxr-xr-x 24 gofrendi gofrendi 4096 Sep 12 21:26 gofrendi
gofrendi@DESKTOP-MEO4ER4 [21:26:12] [/home]
在这里回答我自己的问题:实际发生了什么。
当您在 docker-desktop 中激活 WSL2 后端引擎时,它将创建 2 个不同的存储(并且可能还有 2 个不同的 VM)。
除了我的默认 WSL VM(Ubuntu
那个),Docker-desktop 还创建了 docker-desktop
和 docker-desktop-data
.
安装源可能位于 docker-desktop
或 docker-desktop-data
。