Windows 10 시스템의 WSL-2에서 실행되는 Ubuntu 22.04.3 LTS에서 docker를 실행하려고 합니다.
나는 지시를 따랐다.여기. 하지만 여전히 작동하지 않으며 실행하면 다음 오류가 발생합니다 sudo dockerd
.
failed to register "bridge" driver: failed to create NAT chain DOCKER:
iptables failed: iptables -t nat -N DOCKER:
iptables v1.8.7 (legacy): can't initialize iptables table `nat':
Table does not exist (do you need to insmod?)
Perhaps iptables or your kernel needs to be upgraded.
(exit status 3)
이 작업을 수행하면 modprobe ip_tables
다음을 얻습니다.
modprobe: FATAL: Module ip_tables not found in directory /lib/modules/4.4.0-22621-Microsoft
답변1
이는 Docker의 버그 때문입니다. iptables에는 두 가지 버전이 있습니다. 이전 버전( iptables-legacy
패키지 내)과 최신 nftables용 래퍼( iptables-nft
패키지 내)입니다. nftables는 더 우수하고 강력한 시스템이므로 최신 배포판의 기본 시스템입니다.
그러나 도커는nftables가 제대로 작동하지 않습니다.. 하지만,이 블로그 게시물에 설명된 대로, 패키지로 변경될 수 있습니다 iptables-legacy
. 패키지를 설치한 다음 를 실행하고 sudo update-alternatives --config iptables
nft 옵션 대신 이전 옵션을 선택한 다음 docker 데몬을 다시 시작할 수 있습니다.
또한 기본적으로 WSL 2는 모든 내장 커널 모듈과 함께 제공되며 동적으로 로드할 수 있는 모듈은 없으므로 modprobe
아무 작업도 수행할 수 없습니다. 이는 부분적으로 개별 배포판이 Microsoft가 아닌 배포 이미지를 생성하고 게시하기 때문에 발생하지만 커널은 Microsoft에 고유합니다. 로드 가능한 커널 모듈을 출시하는 것은 배포판에서 해당 이미지를 Microsoft의 커널 이미지로 업데이트해야 하기 때문에(이로 인해 물류 및 정책 문제가 발생함) 비실용적입니다. 따라서 Microsoft는 이를 수행하지 않습니다.
답변2
나는 팔로우한다이 게시물, ubuntu.exe
관리자 권한으로 시작하면 문제가 해결될 것입니다.
그것이 하는 일은 배포판을 다시 설치하고 iptables
그곳에서 작업하는 것입니다. 이전에 설치한 첫 번째 배포판에서는 여전히 작동하지 않습니다. 하지만 새로 설치된 배포판에서는 잘 작동하므로 문제가 해결되었다고 가정합니다.