---
# System prepended metadata

title: wsl 安裝筆記(windows daemon)

---

wsl安裝筆記
===
參考: https://ithelp.ithome.com.tw/articles/10310188
如何啟用windows WSL https://ithelp.ithome.com.tw/articles/10255920
## 安裝wsl ubuntu
```
wsl -l -v  # 查詢自己已經安裝過的linux
wsl -l -o  # 查詢線上有哪些linux可以安裝
wsl --install -d Ubuntu #安裝Ubuntu
wsl --set-default-version 2  # 讓目前處於wsl2的環境，通常用於要安裝linux前設定為安裝wsl2的版本
wsl --unregister Ubuntu   # 讓你想要解除安裝某linux環境的指令，做完後還是要到開始頁面把環境給解除安裝
```
## 在wls中安裝docker
安裝docker遇到的坑(無法直接安裝)
### 更換Systemd
現在很多Linux套件都需要systemd來管理跟啟動服務. 由於WSL2是Ｗindows下的一個VM, 所以微軟實作了一個init (PID 1) 來做到快速啓動WSL VM以及作為與windows 溝通的橋樑. 可以執行systemctl確認是否有systemd
參考作法https://ithelp.ithome.com.tw/articles/10255920(會遇到問題先別急著裝)

### 記得先看這個
https://blog.csdn.net/yellow_hill/article/details/128526709
[WSL]配置systemD 和解决nsenter: cannot open /proc/320/ns/time: No such file or directory 的问题


### docker 安裝指令參考
https://blog.kennycoder.io/2020/01/12/Docker-%E4%BB%8B%E7%B4%B9%E5%8F%8A%E5%AE%89%E8%A3%9D%E6%95%99%E5%AD%B8/



## 不登入使用者執行docker的方法
參考: https://viml.nchc.org.tw/archive_blog_771/
#### 進到wsl(ubuntu)環境設定允許不需要密碼的sudo
    username  ALL=(ALL) NOPASSWD:ALL
#### 設定工作排程器自動執行

接下來，則是可以在 Windows 的工作排程器中，加入一個隨著電腦啟動而執行的工作、來自動執行 WSL 內的 docker daemon。

「工作排程器」可以在開始選單的「Windows 系統管理工具」內找到，也可以用搜尋的方式來執行。

這邊是直接在「工作排程器程式庫」中，點選右方的「建立工作」，然後給他一個名字。
![image](https://hackmd.io/_uploads/HJhMbHb0a.png)

Heresy 這邊是把它叫做「WSL-Docker」，然後記得要選取「不論使用者登入與否均執行」。

然後要修改的地方還有「觸發程序」和「動作」兩項。

在「觸發程序」中，是加入一個「啟動時」的觸發程序，個人是習慣會勾選「延遲工作的時間」，讓他在開機後一小段時間後再執行。
![image](https://hackmd.io/_uploads/rkhXbBbCp.png)

在「動作」的部分，則是設定成「啟動程式」。
![image](https://hackmd.io/_uploads/rJ54WSbCT.png)
然後在「程式或指令碼」這邊，輸入「c:windowssystem32wsl.exe」，在「新增引數（可省略）」這邊，則是輸入「sudo dockerd」。

新增完成後，可以選取他後，手動執行看看是否可以正確地維持在「執行中」的狀態；如果可以的話，則可以在打開 WSL 試試看 docker 是否可以正確執行。

如果都沒問題的話，那以後重開機後，就算使用者沒有登入，WSL2 內的 Docker daemon 都會自動跑起來了～

#### 實驗測試
建立一個container並且每十件秒寫入log
```shell
docker run -d --name logtest --restart=always -v ./log:/app python:3.8 /bin/sh -c "while true; do python3 /app/test.py ; sleep 10; done"
```
#### python code
```python=
import logging

# Creating and Configuring Logger
Log_Format = "%(levelname)s %(asctime)s - %(message)s"

logging.basicConfig(
    filename="/app/log/logfile.log", format=Log_Format, level=logging.ERROR
)

logger = logging.getLogger()
logger.error("Test Log Message")
```

### 2024/3/21 如何在局域网的其他主机上中访问本机的WSL2
參考: https://zhuanlan.zhihu.com/p/425312804