不過我沒有在實機安裝過 alpine ,也不知道這是 PostmarketOS 還是 alpine 的問題
問題在於 Docker 原生是為 iptables 設計的,它會自動生成大量的 iptables 規則。雖然現代核心有提供相容層(iptables-nft),但當 Alpine 同時運行原生 nftables 服務時,兩者的規則鏈(Chains)會像兩道獨立的關卡。
即使你的 iptables 顯示為 ACCEPT,封包到了 nftables 那一關可能就被預設的規則丟棄(DROP)了。
1. 檢查 nftables 是否攔截了流量
nft list ruleset如果看到類似 chain input { type filter hook input priority 0; policy drop; } 或 chain forward { ... policy drop; },Docker 封包就出不去。
因為 Docker 只會去改 iptables,不會去幫改 nftables。
2. 解決方案
方案 A:關閉 nftables
如果不需要 Alpine 本身作為複雜的防火牆,直接關閉它,讓 Docker 完全接管 iptables:
sudo systemctl disable --now nftables方案 B:在 nftables 中允許轉送
如果一定要用 nftables,你必須手動允許 Docker 網橋的流量通過 forward 鏈。 在 /etc/nftables.nft 中,確保 forward 鏈的政策是 accept,或者加入以下規則:
table inet filter {
chain forward {
type filter hook forward priority 0; policy accept;
}
}3.
重啟 Docker:
sudo systemctl restart docker