
我有一台運行 Wireguard VPN 的伺服器,10.0.1.254/24
而 Docker 正在運行172.17.0.1/16
。
我的docker-compose.yaml
看起來像這樣(簡化):
services:
container_a:
image: nginx:latest
ports:
- '10.0.1.254:80:80'
container_b:
image: alpine:latest
wget http://10.0.1.254
現在,我可以在主機上使用 nginx 。我也可以透過 VPN 對等點以相同的方式存取它(例如10.0.1.1
)。但是當我嘗試從另一個 Docker 容器(例如)執行此操作時,docker compose exec container_b wget http://10.0.1.254
我遇到了超時。但是,我可以 ping 通主機 ( docker compose exec container_b ping 10.0.1.254
)。
我的猜測是,這與 Docker 在主機上映射連接埠的方式有關。但我找不到太多關於這方面的資訊。有誰知道為什麼這不起作用?
答案1
結果我仍然安裝了 UFW,它被配置為允許傳入連接到wg0
介面上的此連接埠。但係統足夠聰明,可以走一條捷徑,直接從一個虛擬 Docker 接口到另一個虛擬 Docker 接口,繞過該wg0
接口的 ACCEPT 規則。
我透過使用 解決了這個問題tail +1f /var/log/ufw.log
,然後wget
從另一個 Docker 容器運行失敗的命令。
就我而言,解決方案是簡單地停用 UFW ( sudo ufw disable
),因為我無論如何都不會使用它。