在macos環境下利用docker Compose部署Seata時,直接指定SEATA_IP為特定IP(例如192.168.2.2)往往無效,Seata服務仍然使用Docker內網IP(172開頭)注冊。這是因為macos的Docker網絡配置與linux不同,缺少默認的docker0網橋。本文將分析問題根源并提供解決方案。
問題在于,macOS下Docker默認使用橋接網絡,Seata容器獲取的是Docker分配的內網IP,與主機IP不同。直接在容器內設置SEATA_IP無法改變這一情況。
解決方法并非直接使用–net=host啟動容器(因為Docker Compose不支持直接添加此參數),而是修改docker-compose.yml文件。在Seata服務配置中添加network_mode: “host”,讓Seata容器共享主機網絡命名空間,從而可以使用主機IP。
修改后的docker-compose.yml片段如下:
seata: image: seataio/seata-server:1.3.0 hostname: seata-server ports: - "8091:8091" - "7091:7091" volumes: - ./seata/resources:/seata-server/resources environment: - SEATA_IP=192.168.2.2 - SEATA_PORT=8091 - STORE_MODE=file network_mode: "host"
通過此設置,Seata服務將使用主機IP 192.168.2.2注冊,問題得以解決。 需要注意的是,network_mode: “host” 會帶來潛在的網絡安全風險,請謹慎使用。
? 版權聲明
文章版權歸作者所有,未經允許請勿轉載。
THE END