在macos環(huán)境下利用docker Compose部署Seata時,直接指定SEATA_IP為特定IP(例如192.168.2.2)往往無效,Seata服務(wù)仍然使用Docker內(nèi)網(wǎng)IP(172開頭)注冊。這是因為macos的Docker網(wǎng)絡(luò)配置與linux不同,缺少默認(rèn)的docker0網(wǎng)橋。本文將分析問題根源并提供解決方案。
問題在于,macOS下Docker默認(rèn)使用橋接網(wǎng)絡(luò),Seata容器獲取的是Docker分配的內(nèi)網(wǎng)IP,與主機IP不同。直接在容器內(nèi)設(shè)置SEATA_IP無法改變這一情況。
解決方法并非直接使用–net=host啟動容器(因為Docker Compose不支持直接添加此參數(shù)),而是修改docker-compose.yml文件。在Seata服務(wù)配置中添加network_mode: “host”,讓Seata容器共享主機網(wǎng)絡(luò)命名空間,從而可以使用主機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"
通過此設(shè)置,Seata服務(wù)將使用主機IP 192.168.2.2注冊,問題得以解決。 需要注意的是,network_mode: “host” 會帶來潛在的網(wǎng)絡(luò)安全風(fēng)險,請謹(jǐn)慎使用。
? 版權(quán)聲明
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載。
THE END