Я пытаюсь создать контейнер с Docker API.

Моя среда выглядит следующим образом:

  • Windows 11 (я думаю, она должна работать и в Windows 10)
  • Версия Docker для настольных ПК v20.10.8 со следующими отмеченными настройками:
    • Механизм на основе WS2
    • Выставить демон на tcp: // localhost: 2375 без TLS

Мой запрос на завиток выглядит следующим образом:

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 своего контейнера.

Как ни странно, я обнаружил, что Source Mount не является ни моим 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]
0
goFrendiAsgard 12 Сен 2021 в 17:02
Вы монтируете корневой каталог среды WSL2 в тестовый каталог, у которого есть собственная домашняя папка. Чего именно вы ожидали?
 – 
OneCricketeer
12 Сен 2021 в 17:11
Домашний каталог в моем WSL должен что-то содержать. По крайней мере, он должен содержать мой собственный домашний каталог, но я там ничего не вижу
 – 
goFrendiAsgard
12 Сен 2021 в 17:25
А что находится под /test/mnt?
 – 
OneCricketeer
12 Сен 2021 в 17:34
Ничего такого. Каталог пуст
 – 
goFrendiAsgard
13 Сен 2021 в 03:24

1 ответ

Лучший ответ

Отвечая на свой вопрос здесь: что произошло на самом деле.

Когда вы активируете серверный движок WSL2 на своем рабочем столе докера, он создает 2 разных хранилища (и, предположительно, также 2 разные виртуальные машины).

Помимо моей виртуальной машины WSL по умолчанию (Ubuntu), Docker-desktop также создал docker-desktop и docker-desktop-data.

Источник монтирования, вероятно, находится на docker-desktop или docker-desktop-data.

enter image description here

0
goFrendiAsgard 22 Окт 2021 в 01:42