软件领域疑难杂症记录

  • 项目目的:
    • windsurf能写新项目, deepseek能实时答疑. 但某些常规套路解法靠他们也有些低效(逐token给解法/不可控地给解法)

vps硬盘清理

  • du -h --max-depth=1 /root | sort -h:
    • du (Disk Usage):统计文件和目录的磁盘使用量
    • df (Disk Filesystem):显示文件系统的磁盘空间使用情况
      • df没什么用, 因为vps都是单磁盘
  • apt-get clean(删除缓存), apt autoremove(删除无用包)
    • 没什么用, 实际只清理了几kb
  • find / -type f -size +100M -exec ls -lh {} \; | awk '{ print $9 ": " $5 }': 大文件清理
    • docker下面一堆log, 占据几GB
  • ncdu监控工具定期检查: ncdu /: 可视化查看根路径下的空间占据情况
  • 小结: 1, du/df/ncdu来大致扫描文件夹 2, find这串长指令来扫描大文件 3, 清理docker日志 4, 头疼的是docker容器内的日志清理 -> docker ps --size能基础地看下容器空间占用
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 查看各个文件夹占据的磁盘空间
du -h --max-depth=1 /root | sort -h

# 大文件扫描
find / -type f -size +100M -exec ls -lh {} \; | awk '{ print $9 ": " $5 }'

# fish shell下, 配置logrotate用于清理docker日志
echo "/var/lib/docker/containers/*/*.log {
rotate 7
daily
compress
size=10M
missingok
copytruncate
}" | sudo tee /etc/logrotate.d/docker >/dev/null

# 限制系统日志
sudo mkdir -p /etc/systemd/journald.conf.d echo -e "[Journal]\nSystemMaxUse=100M" | sudo tee /etc/systemd/journald.conf.d/limit.conf sudo systemctl restart systemd-journald

# 限制syslog(系统日志)
echo -e "/var/log/syslog\n{\n rotate 7\n daily\n maxsize 100M\n missingok\n compress\n delaycompress\n}" | sudo tee /etc/logrotate.d/rsyslog sudo systemctl restart rsyslog

# 容器磁盘空间占用
docker ps --size

容器内连不到外网

  • 1, 对alpine的玩转, 用来测试
  • 题外话: vi ~/.local/share/fish/fish_history: fish的历史输入. 直接history也行
  • 上次解决原因: 配置 iptables 规则​​ 来解决容器无法访问外网的问题
    • 这次失效原因: Docker 容器网络 NAT 规则丢失或网络配置变化​​
    • 上次的关键修复: 1, 添加了 iptables 的 MASQUERADE 规则(NAT 转发)2, 放行了 FORWARD 链的流量
    • iptables -t nat -L -n -v查看NAT表规则, iptables -L FORWARD -n -v 查看FORWARD链
  • 持久化 iptables 规则(防止重启失效)​
  • 这次的修复: iptables-restore < /etc/iptables/rules.v4
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
我在之前也遇到过"容器内无法访问外网"的问题, 也曾经解决了, 以下是输入history指令后找到的相关历史输入(所以是上下倒序的): vi /etc/rc.local
vi rules.v4
cd /etc/iptables/
iptables -L FORWARD -n -v
iptables -t nat -A POSTROUTING -s 172.17.0.0/16 -o eth0 -j MASQUERADE
iptables -P FORWARD ACCEPT
iptables -t nat -A POSTROUTING -s 172.18.0.0/16 -o eth0 -j MASQUERADE
systemctl restart docker
iptables -L -n -v
docker network inspect bridge. 你能判断出这次要如何修复吗

# 安装工具(Debian/Ubuntu)
apt update && apt install iptables-persistent -y

# 保存当前规则到持久化文件
iptables-save > /etc/iptables/rules.v4
ip6tables-save > /etc/iptables/rules.v6

# 启用服务(自动开机加载规则)
systemctl enable netfilter-persistent

vps希望访问容器内的子网

  • 阶段1: ​​容器未正确转发来自宿主机的流量到 WireGuard 隧道​​
    • tcpdump抓包分析
    • 结论: wg0.conf, [Interface] Address = 10.0.8.1/24, 关键修改:从 /32 改为 /24
    • 为什么 /32会导致问题?​​
      • ​​10.0.8.1/32​​:表示仅本机可用(10.0.8.1自身),​​不包含整个 10.0.8.0/24子网​​,因此容器会丢弃目标为 10.0.8.2的流量。
      • 10.0.8.1/24​​:表示容器属于 10.0.8.0/24子网,允许转发到同子网的其他 IP(如 10.0.8.2)
  • 阶段2: 安装了firefly, 直接极简搞定, 自动就能转发198.18.0.2, 且内存更省, 界面更好
🔒 隐藏内容(4 Bytes)