Не удается подключиться к демону Docker на debian buster на wsl 2

Я пытаюсь установить докер в подсистеме Windows для Linux (WSL) 2 (работает на Windows Home build 19033.1). Я установил wsl2 в соответствии с инструкциями на странице https://docs.microsoft.com/en-us/windows/wsl/wsl2-install и установил debian из Магазина Windows, то есть debian 10 (buster). Он работает на wsl 2, что подтверждается этим:

wsl -l -v
ИМЯ СОСТОЯНИЕ ВЕРСИИ
* Запуск Debian 2

$ cat / etc / os-release
PRETTY_NAME = "Debian GNU / Linux 10 (buster)"
NAME = "Debian GNU / Linux"
VERSION_ID = "10"
VERSION = "10 ( buster) "
VERSION_CODENAME = buster
ID = debian
HOME_URL =" https://www.debian.org/ "
SUPPORT_URL =" https://www.debian.org/support "
BUG_REPORT_URL = "https://bugs.debian.org/"

Я следовал инструкциям на странице https://linuxconfig.org/how-to-install-docker-on-debian-10-buster-linux для установки докера:

sudo apt install docker.io
sudo docker run hello-world
docker: не удается подключиться к демону Docker в unix: ///var/run/docker.sock. Демон докера запущен?

Посмотрел, работает ли докер:

sudo service docker status
[FAIL] Docker не запущен ... не удалось!

Поэтому я пытаюсь перезапустить демон докера:

$ sudo service docker restart
grep: / etc / fstab: нет такого файла или каталога
[ok] Запуск Docker: docker.

Нашел еще одну ​​статью о SO, в которой говорится, что я могу решить эту проблему, выполнив :

sudo touch / etc / fstab

и это, похоже, сработало (ошибка grep больше не появляется):

$ sudo service docker restart
[ok] Запуск Docker: docker.

Но у меня все еще та же проблема:

$ sudo docker run hello-world
docker: не удается подключиться к демону Docker в unix: ///var/run/docker.sock. Демон докера запущен?

Я посмотрел журнал докеров и там было много ошибок:

$ cat /var/log/docker.log | grep -i error  
time="2019-11-28T21:48:51.725383200Z" level=warning msg="failed to load plugin io.containerd.snapshotter.v1.btrfs" error="path /var/lib/docker/containerd/daemon/io.containerd.snapshotter.v1.btrfs must be a btrfs filesystem to be used with the btrfs snapshotter"  
time="2019-11-28T21:48:51.726777600Z" level=warning msg="failed to load plugin io.containerd.snapshotter.v1.aufs" error="modprobe aufs failed: \"modprobe: ERROR: ../libkmod/libkmod.c:586 kmod_search_moddep() could not open moddep file '/lib/modules/4.19.84-microsoft-standard/modules.dep.bin'\\nmodprobe: FATAL: Module aufs not found in directory /lib/modules/4.19.84-microsoft-standard\\n\": exit status 1"  
time="2019-11-28T21:48:51.726982500Z" level=warning msg="failed to load plugin io.containerd.snapshotter.v1.zfs" error="path /var/lib/docker/containerd/daemon/io.containerd.snapshotter.v1.zfs must be a zfs filesystem to be used with the zfs snapshotter"  
time="2019-11-28T21:48:51.727010800Z" level=warning msg="could not use snapshotter aufs in metadata plugin" error="modprobe aufs failed: \"modprobe: ERROR: ../libkmod/libkmod.c:586 kmod_search_moddep() could not open moddep file '/lib/modules/4.19.84-microsoft-standard/modules.dep.bin'\\nmodprobe: FATAL: Module aufs not found in directory /lib/modules/4.19.84-microsoft-standard\\n\": exit status 1"  
time="2019-11-28T21:48:51.727022700Z" level=warning msg="could not use snapshotter zfs in metadata plugin" error="path /var/lib/docker/containerd/daemon/io.containerd.snapshotter.v1.zfs must be a zfs filesystem to be used with the zfs snapshotter"  
time="2019-11-28T21:48:51.727031100Z" level=warning msg="could not use snapshotter btrfs in metadata plugin" error="path /var/lib/docker/containerd/daemon/io.containerd.snapshotter.v1.btrfs must be a btrfs filesystem to be used with the btrfs snapshotter"  
time="2019-11-28T21:48:51.744791900Z" level=warning msg="Running modprobe nf_nat failed with message: `modprobe: ERROR: ../libkmod/libkmod.c:586 kmod_search_moddep() could not open moddep file '/lib/modules/4.19.84-microsoft-standard/modules.dep.bin'\nmodprobe: WARNING: Module nf_nat not found in directory /lib/modules/4.19.84-microsoft-standard`, error: exit status 1"  
time="2019-11-28T21:48:51.746095200Z" level=warning msg="Running modprobe xt_conntrack failed with message: `modprobe: ERROR: ../libkmod/libkmod.c:586 kmod_search_moddep() could not open moddep file '/lib/modules/4.19.84-microsoft-standard/modules.dep.bin'\nmodprobe: WARNING: Module xt_conntrack not found in directory /lib/modules/4.19.84-microsoft-standard`, error: exit status 1"  
time="2019-11-28T21:48:51.768996800Z" level=info msg="stopping event stream following graceful shutdown" error="<nil>" module=libcontainerd namespace=moby  
time="2019-11-28T21:48:51.769171500Z" level=info msg="stopping event stream following graceful shutdown" error="context canceled" module=libcontainerd namespace=plugins.moby
Error starting daemon: Error initializing network controller: error obtaining controller instance: failed to create NAT chain DOCKER: iptables failed: iptables --wait -t nat -N DOCKER: iptables v1.8.2 (nf_tables):  CHAIN_ADD failed (No such file or directory): chain PREROUTING

Немного потеряно в понимании того, в чем проблема. Надеетесь, что кто-нибудь посоветует?


Я последовал отличному совету @ sx-tan ниже, который рекомендовал следовать инструкциям на https://kind.sigs.k8s.io/docs/user/using-wsl2/#updating-kernel. В этих инструкциях говорится о выпуске:

# This assumes Ubuntu or Debian, a different step may be needed for RPM based distributions
sudo apt install build-essential flex bison libssl-dev libelf-dev
git clone --depth 1 https://github.com/microsoft/WSL2-Linux-Kernel.git
cd WSL2-Linux-Kernel
make -j4 KCONFIG_CONFIG=Microsoft/config-wsl
mkdir /mnt/c/linuxtemp
cp arch/x86_x64/boot/bzImage /mnt/c/linuxtemp/

К сожалению, команды не создают такую ​​же структуру dir, которую ожидает команда cp. У меня нет arch/x86_x64/ реж. У меня есть arch/x86 каталог, но он не содержит boot/bzImage:

jamiet@DESKTOP-GA45TGH:/mnt/c/Users/jamie/git/github/microsoft/WSL2-Linux-Kernel$ ls arch/x86/boot/
a20.c       code16gcc.h  cpuflags.h              install.sh      pm.c      string.h      video.c
apm.c       compressed   ctype.h                 main.c          pmjump.S  tools         video.h
bioscall.S  copy.S       early_serial_console.c  Makefile        printf.c  tty.c         video-mode.c
bitops.h    cpu.c        edd.c                   memory.c        regs.c    version.c     video-vesa.c
boot.h      cpucheck.c   genimage.sh             mkcpustr.c      setup.ld  vesa.h        video-vga.c
cmdline.c   cpuflags.c   header.S                mtools.conf.in  string.c  video-bios.c

Я следовал точным инструкциям, поэтому могу только догадываться, что репо изменилось с момента https://kind.sigs.k8s.io/docs/user/using-wsl2/#updating-kernel был написан. Если это поможет, вот каталоги в arch:

jamiet@DESKTOP-GA45TGH:/mnt/c/Users/jamie/git/github/microsoft/WSL2-Linux-Kernel$ ls arch/
alpha  arm    c6x    hexagon  Kconfig  microblaze  nds32  openrisc  powerpc  s390  sparc  unicore32  xtensa
arc    arm64  h8300  ia64     m68k     mips        nios2  parisc    riscv    sh    um     x86

Все еще надеюсь на чью-то ясность.


person jamiet    schedule 28.11.2019    source источник
comment
Вы уверены, что используете WSL2? Какой полный номер версии Windows 10? Демон Docker нужно запускать из systemd. Официально рекомендованного способа сделать это не существует. Вы соглашаетесь выполнять некоторые неофициальные команды?   -  person Biswapriyo    schedule 30.11.2019
comment
Привет, спасибо за ответ. Да, это wsl 2, я обновил сообщение, чтобы отразить это, а также включил номер сборки Windows10. Я могу попробовать что-нибудь из левого поля, если это сработает.   -  person jamiet    schedule 30.11.2019


Ответы (2)


Публикация здесь на случай, если у кого-то еще возникнет эта проблема, как и у меня. Похоже, это та же проблема, что и у https://superuser.com/questions/1468316/which-kernel-moduules-are-really-needed-for-docker-installation

Согласно этому ответу после запуска:

sudo update-alternatives --set iptables /usr/sbin/iptables-legacy
sudo update-alternatives --set ip6tables /usr/sbin/ip6tables-legacy

Мне удалось запустить службу докеров.

person Adam B    schedule 26.10.2020

У меня такая же проблема, потому что в Debian не установлены модули ядра 4.19.84-microsoft-standard. К сожалению, Microsoft не предоставляет предварительно созданные библиотеки lib / modules для этого ядра, вы должны собрать ядро, используя исходный код из https://github.com/microsoft/WSL2-Linux-Kernel.

Я попробовал ядро ​​4.9.0-11-amd64, извлеченное из образа Debian в качестве настраиваемого ядра (в .wslconfig), но WSL2 не смог его загрузить. Так что другого выхода нет.

Вот инструкции: https://kind.sigs.k8s.io/docs/user/using-wsl2/#updating-kernel

После сборки ядра запустите sudo make modules_install, затем запустите docker:

* docker run привет-мир

Привет из Докера!

Это сообщение показывает, что ваша установка работает правильно. *

person S. X. Tan    schedule 05.12.2019
comment
спасибо за ответ. Я попробовал ваше предложение, но споткнулся. Я соответствующим образом обновил сообщение выше. - person jamiet; 10.12.2019