macOS下Docker Compose部署Seata,如何解決SEATA_IP設(shè)置無效的問題?

macOS下Docker Compose部署Seata,如何解決SEATA_IP設(shè)置無效的問題?

在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)聲明
THE END
喜歡就支持一下吧
點贊7 分享