Automatically Docker Daemon Boot on Windows Subsystem Linux(WSL에서 docker 데몬 자동 시작)
동기
windows10 home에 wsl2로 docker를 도입하고, 드디어 docker-compose도 쌓아 최고의 개발 환경을 만들려고 했지만, 한번 전원을 끄면 로그온할 때마다 수동으로 daemon
군을 다시 시작하지 않아 해야 할 일을 깨달았다. docker-compose.yml
에서 restart:always
하고 있는 관계상, 가능하면 Win10이 재기동해 버려도 로그온 하면 곧바로 daemon
군에게는 일어나고 싶으면…
TL; DR
cf. Docker Running Seamlessly in Windows Subsystem Linux
1. sudo vi /usr/local/sbin/start_docker.sh
/usr/local/sbin/start_docker.sh#!/usr/bin/env bash
# The first command will setup cgroups mounts on the subsystem
# (this only needs to be done once per reboot), and the second
# will bring up the docker service using systemd.
sudo cgroupfs-mount
sudo service docker start
2. 실행 권한 부여
$ sudo chmod +x /usr/local/sbin/start_docker.sh
# Lock down edit privileges
$ sudo chmod 755 /usr/local/sbin/start_docker.sh
3. sudo vi /etc/sudoers
cf. Docker Running Seamlessly in Windows Subsystem Linux
1.
sudo vi /usr/local/sbin/start_docker.sh
/usr/local/sbin/start_docker.sh
#!/usr/bin/env bash
# The first command will setup cgroups mounts on the subsystem
# (this only needs to be done once per reboot), and the second
# will bring up the docker service using systemd.
sudo cgroupfs-mount
sudo service docker start
2. 실행 권한 부여
$ sudo chmod +x /usr/local/sbin/start_docker.sh
# Lock down edit privileges
$ sudo chmod 755 /usr/local/sbin/start_docker.sh
3.
sudo vi /etc/sudoers
하단에 다음 항목 추가
/etc/sudoers
# Enable docker services to start without sudo
yourUserName ALL=(ALL:ALL) NOPASSWD: /bin/sh /usr/local/sbin/start_docker.sh
4. 작업 스케줄러로 로그온할 때 wsl에서 docker를 시작합니다.
C:\Windows\System32\bash.exe
-c "sudo /bin/sh /usr/local/sbin/start_docker.sh"
5. 재부팅하고 다시 로그온한 후
sudo service docker status
에서 동작 확인$ sudo service docker status
* Docker is running
사적 해석 (자기 중심 해설)
1. sudo vi /usr/local/sbin/start_docker.sh
start_docker.sh
라는 쉘 스크립트가 /usr/local/sbin
라는 디렉토리에 있습니다. 쓰기에는 루트 권한이 필요합니다. vi 로 열면 읽어들이기 한정이 되어 있으므로, :w !sudo tee %
하면 좋을 것 같아? (에디터 초보자 병감)
2. 실행 권한 부여
chmod
명령을 사용하여 /usr/local/sbin/start_docker.sh
권한을 변경 중입니다. 옵션에 +x
를 사용하고 있으므로, "eXecution"을 추가한 것이 된다. 이것을 단순히 부여할 뿐만 아니라 대상마다 숫자로 지정하는 방법이 chmod OOO
라는 것이다.
이 조작에 의해, /usr/local/sbin
에 놓여져 있는 스크립트를 시스템측으로부터 실행할 수 있게 된다.
3. sudo vi /etc/sudoers
/etc/sudoers
에는 sudo
주위의 이것이 설정되어 있다 (실행 가능 사용자라든지 명령등). 이 파일에의 변경은 즉시 반영되므로 :w !sudo tee %
하기 전에 오자 탈자등이 없는지 염두에 확인하는 것 (이패). 실수하면 sudo
를 사용할 수 없습니다 → 구성 파일에 오류가 있습니다! 가 되어 포장한다.
만약 그렇게 되었다면, 패스워드를 재설정할 때와 마찬가지로, powershell
또는 cmd.exe
에서 wsl -u root
로 root 로그인하는 해결책이 있다(sudo 없이 /etc/sudoers
를 변경할 수 있는 사용자로 한 루트 군에게 물어 수정)
4. 작업 스케줄러로 로그온할 때 wsl에서 docker 시작
덤
실은 /usr/local/sbin/start_docker.sh
의 내용은 docker 기동 커멘드에 한정하지 않고 어떤 것이든 실행할 수 있다 (예를 들어 service
에 등록되어 있는 것 등, 항상 sudo
가 필요한 것 모두). 인터랙티브 실행이 되지 않도록 주의하면서, ssh
나 cron
등을 여기에 추기해 두는 것으로, 거의 보통의 서버와 변함없는 행동을 시킬 수 있다.
위의 공정 각각에서 파일명을 /usr/local/sbin/WSL_autostart.sh
등으로 변경하고, 그 파일에 적절히 필요한 명령을 추기해 나가면 좋을 것이다.
참조:
Reference
이 문제에 관하여(Automatically Docker Daemon Boot on Windows Subsystem Linux(WSL에서 docker 데몬 자동 시작)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/Ningensei848/items/75adeb29bb143633d60c텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)