Under LAN accessing TTRSS(WSL2) cross the Windows IP.
WSL2 Start Mothod
# Error Way:
$systemctl start docker.service
# System has not been booted with systemd as init system (PID 1). Can't operate.
# Failed to connect to bus: Host is down
# Right Way: (via: https://stackoverflow.com/questions/52197246/wsl-redis-encountered-system-has-not-been-booted-with-systemd-as-init-system-pi
$sudo dockerd
$sudo service docker start
$sudo /etc/init.d/docker start
function Output-Lan-Ip-Bin {
$Lan_Ip = netsh interface ip show address "WLAN" | findstr "IP Address" | Select-String -Pattern '([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*)' | %{ $_.matches.Value }
#ipconfig | findstr /i "ipv4" | select-object -Skip 1 | select-object -First 1 | Select-String -Pattern '([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*)' | % { $($_.matches.groups[1]).Value}
# NOTES: get the second line IP. I have three IPs, you could modify
# select-object -Skip 1 | select-object -First 1
# to fit your machine. :)
echo "URL_PATH=$Lan_Ip" > C:\Users\15517\bin\lan_ip
# output sharing Lan IP path
echo "Your Server: http://${Lan_Ip}:4040"
echo "Output PC Lan IP Successfully."
}
function Netsh-Lan {
$tmp=cat C:\Users\15517\bin\wsl_ip
# get sharing IP
sudo netsh interface portproxy add v4tov4 listenport=4040 listenaddress=* connectport=4040 connectaddress=$tmp protocol=tcp
echo "Port Forward Set Successfully."
# port forward
netsh interface portproxy show all
}
function Start-TTRSS { # main
Output-Lan-Ip-Bin
wsl /mnt/c/Users/15517/bin/wsl-ip.sh
wsl sudo service docker start
#via https://docs.docker.com/compose/compose-file/compose-file-v2/
wsl docker-compose -f /home/bgzocg/ttrss/docker-compose.yml --env /home/bgzocg/ttrss/.env up -d
Netsh-Lan
}
C:\Users\15517\bin\wsl-ip.sh
#!/bin/sh
# author: bGZo
# update: 220316
# set env
host_ip=$(cat /etc/resolv.conf |grep "nameserver" |cut -f 2 -d " ")
echo "HTTP_PROXY=$host_ip" > /home/bgzocg/ttrss/.env
cat /mnt/c/Users/15517/bin/lan_ip >> /home/bgzocg/ttrss/.env
# output shring IP
ip addr show eth0 | grep 'inet ' | cut -f 6 -d ' ' | cut -f 1 -d '/' > /mnt/c/Users/15517/bin/wsl_ip
echo "Output WSL2 IP And Set Proxy Successfully."
Keywords:
docker
/wsl2
/port forward
Some Points Noticed.
WSL2 Start Mothod
Deploy TTRSS with Proxy 🤯
部署 TTRSS 的部分可以参考这些博客, 他们写的都比我耐心和详细, 这里我就不讲废话了.
部署的命令可能稍有不同:
Communication IP
docker-compose.yml
配置文件需要注意这几行,HTTP_PROXY
只有写在配置文件中才会生效, 然而命令行传参也不可行, 所以只能用另一个文件.env
传值.部署的时候因为用到了两个不确定的 IP, 而 WSL2 IP 无法固定, 当然后者可以通过路由器的静态IP分配解决, 而针对 WSL2 解决静态IP的场景有很多解决方案, 如:
windows
/wsl
的两个IP, 这样两者就都能拿到各自的 IP 了.C:\Users\15517\bin\lan_ip
C:\Users\15517\bin\wsl_ip
Lan Device Access
因为 WSL2 的特殊原因, 局域网访问设备需要主机 (Windows) 将 WSL2 的特定端口暴露出去, 映射到 windows 上.
至此所有的坑就踩完了, 都是些简单的命令堆砌, 大多是解决使用 WSL2 这个特性所需要付出的代价罢了
Windows Docker Comparison
另外, 博主还对比了 windows docker 利用 WSL2 虚拟化托管 TTRSS, 发现系统占用不如直接用 WSL2 来的轻便, 具体体验是
当然, 除了内存占用更多之外, 配置代理更是无从下手, 上文的配置文件失效 + GUI 界面配置也失败了, 总是找不准代理的地址, 猜测是叠上 WSL2 的 Buff, 无法简单的通过
127.0.0.1:7890
来解决... 这个问题可能真的无解, via: Stackoverflow, 报错如下, 希望知道的大佬可以指点一二.也许还要做一次端口转发, 复杂度两者都快一样了, 所以最后放弃了😁...
Backup Your Data
当然中途换到 windows 做过一次数据迁移. 尝试挂载备份了数据, 移植到
windows
, 其实最重要的就是一个.sql
文件, 其他都可以丢弃.via: 🎯 备份和迁移数据 - Docker 快速入门 - 易文档
Finally
使用如下, 仅供参考 (脚本因机器环境而异,
windows
用户名 15517 和wsl2
用户名bgzocg
,proxy
端口7890
,ttrss
端口4040
).C:\Users\15517\Documents\PowerShell\Microsoft.PowerShell_profile.ps1
C:\Users\15517\bin\wsl-ip.sh