2026年1月11日

PostmarketOS 中 的 docker 無法外連的問題

PostmarketOS 是衍生自 alpine
不過我沒有在實機安裝過 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

沒有留言:

張貼留言