WSL2에서 Docker 사용
WSL2는 Hyper-V 가상화를 기반으로 한 리눅스이기 때문에 WSL에서 Docker를 뛰고 싶습니다.내가 즐겁게 Docker를 설치한 후에 시작할 수 없다는 것을 발견했다. 왜냐하면 PID가 1인 프로세스는 시스템d가 아니라 init이기 때문에 나는 이 닭을 멍하게 만들었다.한 번 검색한 후에 누군가가 GitHub에서 해결 방안을 제시했다.Genie 원리는 리눅스 namespace를 이용하여 격리를 실현하고 격리된 공간에서 시스템d를 실행하는 것이다. 그러면 시스템d의 PID는 1이다.
코드를 보고 몇 가지 중요한 명령을 받았어요.
저희의 절차는요.
pidof
로 systemd
프로세스가 있는지 확인하고, 있으면 3으로 건너뛰고, 그렇지 않으면 2로 건너뛴다.unshare
운행systemd
시켜주고systemd
새namespace에 있는 PID가 1입니다.전체 명령은 daemonize
명령으로 실행되며, 이렇게 만들어진 systemd
은 백엔드 프로세스 형식으로 계속 실행됩니다.nsenter
와 runuser
로 새로 만든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
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Swarm의 도커 비밀이 게시물에서는 Redis를 사용한 실제 시나리오 예제를 제공하여 사용 방법을 보여주고자 합니다. Docker 기술에 대한 기본 지식 Docker Swarm 오케스트레이터에 대한 기본 지식 "Docker Swarm ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.