WSL2에서 Docker 사용

1975 단어 dockerlinuxwindows10
텍스트 링크
WSL2는 Hyper-V 가상화를 기반으로 한 리눅스이기 때문에 WSL에서 Docker를 뛰고 싶습니다.내가 즐겁게 Docker를 설치한 후에 시작할 수 없다는 것을 발견했다. 왜냐하면 PID가 1인 프로세스는 시스템d가 아니라 init이기 때문에 나는 이 닭을 멍하게 만들었다.한 번 검색한 후에 누군가가 GitHub에서 해결 방안을 제시했다.Genie 원리는 리눅스 namespace를 이용하여 격리를 실현하고 격리된 공간에서 시스템d를 실행하는 것이다. 그러면 시스템d의 PID는 1이다.
코드를 보고 몇 가지 중요한 명령을 받았어요.
  • unshare: 새namespace에서 명령을 실행합니다.man page
  • nsenter:namespace에서 명령을 실행합니다.man page
  • runuser: 명령을 실행하는 사용자를 전환합니다.man page

  • 저희의 절차는요.
  • pidofsystemd 프로세스가 있는지 확인하고, 있으면 3으로 건너뛰고, 그렇지 않으면 2로 건너뛴다.
  • unshare운행systemd시켜주고systemd새namespace에 있는 PID가 1입니다.전체 명령은 daemonize 명령으로 실행되며, 이렇게 만들어진 systemd 은 백엔드 프로세스 형식으로 계속 실행됩니다.
  • nsenterrunuser로 새로 만든namespace에 들어가서 셸을 사용자 신분으로 실행합니다.

  • 그래서 우리는 이런 스크립트를 얻을 수 있다GitHub 전송문
    #!/bin/bash
    
    systemd_pid=
    if [ -z $(pidof systemd) ]; then
        daemonize /usr/bin/unshare -fp --propagation shared --mount-proc systemd
    fi
    
    while [ -z $systemd_pid ]
    do
        for pid in $(pidof systemd)
        do
            systemd_pid=$pid
        done
    done
    
    if [ -z $WHO ]; then
        WHO=root
        WD=/
    else
        WD=/home/$WHO
    fi
    
    nsenter -t $systemd_pid -m -p --wd=$WD runuser -m -p -u $WHO zsh

    사용 방법:
    WHO=`whoami` sudo -E ./wslsystemd.sh

    좋은 웹페이지 즐겨찾기