2017-09-01 39 views
1

我想通過docker-compose在單個虛擬機中安裝hyperledger結構和kafka訂單。當我在NAT網絡模式下使用VM時,我發現它不起作用。當我在Bridge網絡節點中使用VM時,這是工作的。波紋管控制檯日誌:

orderer0.example.com | [sarama] 2017/09/01 14:10:49.471276 broker.go:96:無法連接到經紀人kafka3:9092:dial tcp:I/O timeout orderer0.example.com | [sarama] 2017/09/01 14:10:49.471339 client.go:620:客戶端/元數據在獲取元數據時從代理獲取錯誤:dial tcp:I/O timeout orderer0.example.com | [sarama] 2017/09/01 14:10:49.471350 config.go:329:ClientID是'sarama'的默認值,您應該考慮將其設置爲特定於應用程序的內容。 orderer0.example.com | [sarama] 2017/09/01 14:10:49.471363 client.go:601:客戶端/元數據獲取來自代理商的所有主題的元數據kafka0:9092 orderer1.example.com | [sarama] 2017/09/01 14:10:49.581308 broker.go:96:無法連接到代理kafka1:9092:撥號tcp:I/O超時 orderer1.example.com | [sarama] 2017/09/01 14:10:49.581336 client.go:620:客戶端/元數據在獲取元數據時從代理獲取錯誤:dial tcp:I/O timeout orderer1.example.com | [sarama] 2017/09/01 14:10:49.581344 config.go:329:ClientID是'sarama'的默認值,您應該考慮將其設置爲特定於應用程序的內容。 orderer1.example.com | [sarama] 2017/09/01 14:10:49.581357 client.go:601:客戶端/元數據獲取來自代理商kafka3的所有主題的元數據:9092 orderer2.example.com | [sarama] 2017/09/01 14:10:50.633648 broker.go:96:無法連接到代理kafka2:9092:撥號tcp:I/O超時 orderer2.example.com | [sarama] 2017/09/01 14:10:50.633691 client.go:620:客戶端/元數據在獲取元數據時從代理獲取錯誤:dial tcp:I/O timeout orderer2.example.com | [sarama] 2017/09/01 14:10:50.633699 config.go:329:ClientID是'sarama'的默認值,您應該考慮將其設置爲特定於應用程序的內容。 orderer2.example.com | [sarama] 2017/09/01 14:10:50.633713 client.go:601:客戶端/元數據獲取來自代理商的所有主題的元數據kafka0:9092 orderer0.example.com | [sarama] 2017/09/01 14:10:59.471960 broker.go:96:無法連接到代理kafka0:9092:撥號tcp:I/O超時 orderer0.example.com | [sarama] 2017/09/01 14:10:59.472069 client.go:620:客戶端/元數據在獲取元數據時從代理獲取錯誤:dial tcp:I/O timeout orderer0.example.com | [sarama] 2017/09/01 14:10:59.472100 config.go:329:ClientID是'sarama'的默認值,您應該考慮將其設置爲特定於應用程序的內容。 orderer0.example.com | [sarama] 2017/09/01 14:10:59.472150 client.go:601:客戶端/元數據獲取來自代理商kafka2的所有主題的元數據:9092 orderer1.example.com | [sarama] 2017/09/01 14:10:59.581900 broker.go:96:無法連接到經紀人kafka3:9092:撥號tcp:I/O超時 orderer1.example.com | [sarama] 2017/09/01 14:10:59.581927 client.go:620:客戶端/元數據在獲取元數據時從代理獲取錯誤:dial tcp:I/O timeout orderer1.example.com | [sarama] 2017/09/01 14:10:59.581935 config.go:329:ClientID是'sarama'的默認值,您應該考慮將其設置爲特定於應用程序的內容。 orderer1.example.com | [sarama] 2017/09/01 14:10:59.581948 client.go:601:客戶端/元數據獲取來自代理商的所有主題的元數據kafka0:9092 orderer2.example.com | [sarama] 2017/09/01 14:11:00.635034 broker.go:96:無法連接到代理kafka0:9092:撥號tcp:I/O超時 orderer2.example.com | [sarama] 2017/09/01 14:11:00.635106 client.go:620:客戶端/元數據在獲取元數據時從代理獲取錯誤:dial tcp:I/O timeout orderer2.example.com | [sarama] 2017/09/01 14:11:00.635122 config.go:329:ClientID是'sarama'的默認值,您應該考慮將其設置爲特定於應用程序的內容。 orderer2.example.com | [sarama] 2017/09/01 14:11:00.635157客戶端。去:601:客戶端/元數據獲取來自經紀人kafka1的所有主題的元數據:9092 orderer0.example.com | [sarama] 2017/09/01 14:11:09.481998 broker.go:96:無法連接到代理kafka2:9092:在127.0.0.11:53上撥號tcp:lookup kafka2:撥號udp 127.0.0.11:53:i/o超時 orderer0.example.com |客戶端/元數據在獲取元數據時從代理獲取錯誤:在127.0.0.11:53上撥號tcp:lookup kafka2:撥號udp 127.0.0.11:53: I/O超時 orderer0.example.com | [sarama] 2017/09/01 14:11:09.482172 config.go:329:ClientID是'sarama'的默認值,您應該考慮將其設置爲特定於應用程序的內容。 orderer0.example.com | [sarama] 2017/09/01 14:11:09.482194 client.go:601:客戶端/元數據獲取來自代理商的所有主題的元數據kafka1:9092 orderer1.example.com | [sarama] 2017/09/01 14:11:09.591512 broker.go:96:無法連接到代理kafka0:9092:在127.0.0.11:53上撥號tcp:lookup kafka0:撥號udp 127.0.0.11:53:i/o超時 orderer1.example.com | [sarama] 2017/09/01 14:11:09.591542 client.go:620:客戶端/元數據在獲取元數據時從代理獲取錯誤:撥號tcp:在127.0.0.11:53上查找kafka0:撥號udp 127.0.0.11:53: I/O超時 orderer1.example.com | [sarama] 2017/09/01 14:11:09.591549 config.go:329:ClientID是'sarama'的默認值,您應該考慮將其設置爲特定於應用程序的內容。 orderer1.example.com | [sarama] 2017/09/01 14:11:09.591562 client.go:601:客戶端/元數據獲取來自代理商的所有主題的元數據kafka2:9092 orderer2.example.com | [sarama] 2017/09/01 14:11:10.635648 broker.go:96:無法連接到經紀人kafka1:9092:撥號tcp:I/O超時 orderer2.example.com | [sarama] 2017/09/01 14:11:10.635798 client.go:620:客戶端/元數據在獲取元數據時從代理獲取錯誤:dial tcp:I/O timeout orderer2.example.com | [sarama] 2017/09/01 14:11:10.635827 config.go:329:ClientID是'sarama'的默認值,您應該考慮將其設置爲特定於應用程序的內容。Hyperledger fabric 1.0 kafka安裝。它工作在虛擬機(橋接模式),但不適用於虛擬機(NAT)

orderer2.example.com | [sarama] 2017/09/01 14:11:10.635918 client.go:601:客戶端/元數據獲取來自經紀人kafka3的所有主題的元數據:9092

我使用docker網絡檢查來查看kafka0的ip爲低潮,它是172.22.0.11 ....

 "11eaffebfa5be61cfcaaa400b6a30c4da1b05df109d7b72f1f841ff7d0a57e06": { 
      "Name": "kafka0", 
      "EndpointID": "c19bcc0f152498e18c2602855e72da01fefd29fd57c7c3d7ff07f4397e2db6bf", 
      "MacAddress": "02:42:ac:16:00:0b", 
      "IPv4Address": "172.22.0.11/16", 
      "IPv6Address": "" 

},

但爲什麼訂貨人連接到kafka0在127.0.0.11?參見下文登錄

無法連接到經紀商kafka0:9092:撥號TCP:上127.0.0.11:53查找kafka0:撥打UDP 127.0.0.11:53:I/O超時

我不明白這一點爲什麼訂閱者在127.0.0.11中查看kafka0而不是172.22.0.11。所有的集裝箱都在同一個碼頭橋網絡中。我通過docker網絡檢查雙倍確認。該日誌波紋管...

[ { 「名稱」: 「fabricdockercomposesvt_default」, 「ID」: 「4e8fac6babf5e119e12bb65cf9816be913a038e9f11bd06106f20af53abaa5dc」, 「創建」:「2017-09-01T02:59:52.678519627-07: 00" , 「範圍」: 「本地」, 「驅動程序」: 「橋」, 「EnableIPv6」:假的, 「IPAM」:{ 「驅動程序」: 「默認」, 「選項」:空, 「配置」:[ { 「子網」:「172.22.0.0/16」, 「網關」:「172.22.0。1" } ] }, 「內部」:假, 「可拆卸的」:假, 「集裝箱」:{ 「05f86e2c5f9ab82aa17063d84330a8026c730b21c547567855b81599243c3f0d」:{ 「名稱」: 「peer1.org1.example.com」, 「的EndpointId」: 「932343ee2303ee87d056f2089305994ab750efc59d0f2ebb0e961e4e940da0eb」, 「MACADDRESS」: 「02:42:AC:16:00:02」, 「IPv4Address」: 「172.22.0.2/16」, 「IPv6Address」: 「」 } , 「0e40b56fafb4a53c2efc23e0121c3447218fda02bd0fc50a7b3cf97777a3e552」:{ 「Name」:「ca_peerOrg1」, 「En dpointID「: 」6f794c84ab7585bc979a815fe7b510f811cfefd0a8c87c51c4b3fb5e0d14c23e「, 」MACADDRESS「: 」02:42:AC:16:00:08「, 」IPv4Address「: 」172.22.0.8/16「, 」IPv6Address「: 」「 }, 「11eaffebfa5be61cfcaaa400b6a30c4da1b05df109d7b72f1f841ff7d0a57e06」:{ 「名稱」: 「kafka0」, 「的EndpointId」: 「c19bcc0f152498e18c2602855e72da01fefd29fd57c7c3d7ff07f4397e2db6bf」, 「MACADDRESS」: 「02:42:AC:16:00:0b」 時, 「IPv4Address」:「172.22。 0.11/16" , 「IPv6Address」: 「」 }, 「239381cb14521601efc9dccc9ae96f21b8a7883cc6c1174679e0e59d9f284771」:{ 「名稱」: 「orderer1.example.com」 「的EndpointId」: 「995349ac618b3ce3099d3b8de5466077a08dc48196651fd7eae2bb8ebe29e013」, 「MACADDRESS」: 「02:42:AC:16:00:0F」, 「IPv4Address」: 「172.22.0.15/16」, 「IPv6Address」: 「」 } , 「27b4ef727aa9bf189e9b7262d972c627cc77c60407f1e669412b431d6bd48949」:{ 「名稱」: 「kafka2」, 「的EndpointId」: 「294e7d9d79da12e35db42d870a9ed78136d19dad5c67bc3e301da4a52a34efde」, 「MACADDRESS」: 「02:42:AC:16:00:0D」, 「IPv4Address」:「 172.22.0.13/16「, 」IPv6Address「:」「 }, 」3959d50127280b311e358668b33b4718c18540c0c7695a2a7bbdd07bbcaf373a「:{ 」Name「: 「zookeeper2」, 「的EndpointId」: 「4e3d9c0d905190bbe24e5e1c9579d4046cb2b8ff33d4a57b23af4a4cd6eddf87」, 「MACADDRESS」: 「02:42:AC:16:00:07」, 「IPv4Address」: 「172.22.0.7/16」, 「IPv6Address」: 「」 }, 「5689c378b255e649c40dd5988810437a6c1d0d2ea1c48340da5eb66a684b3a78」:{ 「名稱」: 「peer1.org2.example.com」, 「的EndpointId」: 「1ec40982fbbf10005231e6a73557ad677f32c0f1aeb2a77818ae86627c3b0f93」, 「MACADDRESS」:「02:42:AC:16:00 :05" , 「IPv4Address」: 「172.22.0.5/16」, 「IPv6Address」: 「」 }, 「5f386fd1480ea079dfaa9ed15246bf7f42cafd82f6bc1f3eaa1f9ae4a9852655」:{ 「名稱」: 「orderer0.example.com」, 「的EndpointId」: 「fb76384614442a12735ee2a844787acbd0970a428682236b9a2aba22d8a62269」, 「MACADDRESS」: 「02:42:AC:16:00:11」, 「IPv4Address」:「172.22.0.17/16" , 「IPv6Address」: 「」 }, 「6e773f10d98ce70b768c9ff13cfa15349fd512376748197168762be4af116b0d」:{ 「名稱」: 「zookeeper1」, 「的EndpointId」: 「3d6902f623c8541d4657ef4323c1527a6021e7e140eca5dcb9037154f739c96a」, 「MACADDRESS」:「02:42:AC: 16:00:0a「, 」IPv4Address「:」172.22.0。10/16 「 " IPv6Address 」:「 」} , 「 8198dd5c82939c6513dd9fcec8b4a308c631d4b008e4d5774bf0ca0f46bc914e 」 {「 名稱 」:「 orderer2.example.com」, " 的EndpointId 「:」 d073d216e8e7173984b0d64ef77d0b85315c6440b306324e518f18893ab3896c」, " MACADDRESS 「」 02 :42:AC:16:00:10 「 " IPv4Address 」:「 172.22.0.16/16」, " IPv6Address 「:」 「} , 」 8352c58d066ab776ce3e1c50d43d5105130664ba193ae52bc1e00d723923062f 「 {」 名稱 「:」 阿里」, 「的EndpointId」: 「39ce6d60b4f223adcd9969832d0442e78d9a7b30737ab6892614f2198db58c0c」, 「MACADDRESS」: 「02:42:AC:16:00:12」, 「IPv4Address」: 「172.22.0.18/16」, 「IPv6Address」: 「」} , 「8ec391c08bfcb00dd8c08ddb3c230c47e2c19a340e936451aa25dac875556e3f」 { 「名稱」: 「kafka3」, 「的EndpointId」: 「1ddc30616adc68ddb39e912131b10b8719f887d8c589e2044e453dd9aac11e3f」, 「MACADDRESS」 「02:42:AC:16:00:0C」 「IPv4Address」: 「172.22.0.12/16」, 「IPv6Address」: 「」} , 「9962d040aa1532798195a4fd29d60308ed2f14cdd6db9c5de15802fde82c9a2f」 { 「名稱」:「 ca_peerOrg2 「 」 的EndpointId 「:」 bdb3959d034d2989d0b046d323ee716ab85fa168a27cb717b9c8837fe9fef0e1 「 " MACADDRESS 」:「 02:42:AC:16:00:09」, 「IPv4Address」: 「172.22.0.9/16」, 「IPv6Address」: 「」} , 「9f7c182c543ae849db3cdf09c011e109b5d4a5cf5922ba6b6bfc5c80e83b080c」 { 「名稱」: 「peer0.org2.example.com」, 「的EndpointId」「 db5986d7e0ffe77e4eced6c43950aaeabe64e4949ab976d017d8df2c446f58f0 「 」 MACADDRESS 「:」 02:42:AC:16:00:04 「 " IPv4Address 」:「 172.22.0.4/16」, " IPv6Address 「:」 「} , 」 ad17f4de4a0a1a4348515bf061fcec3ed70c36882e7181165eb53060714a137d「 { 「名稱」: 「kafka1」, 「的EndpointId」: 「3897d1c584214be158b1c84f65824dcf2fb6649070128e0589da78cbb383472a」, 「MACADDRESS」 「02:42:AC:16:00:0E」 「IPv4Address」: 「172.22.0.14/16」, 「IPv6Address」: 「」} , 「d9923058ffe9697103daa740c68fa10d015788f6bc4e83214d8eff21cf9ada43」 { 「名稱」:「 zookeeper0 「 」 的EndpointId 「:」 a0b2d2a321be2bbbdbaab931b3789572f50ea0fcaed4c80da2acc906fe01fed4 「 " MACADDRESS 」:「 02:42:AC:16:00:06」, " IPv4Address 「:」 172.22.0.6/16」, " IPv6Address 「」 「 }, 」 fa6e25647fb0450aadcab51266a94701bf6db49439157372db6e016555c08079 「 {」 名稱 「:」 peer0.org1.example.com 「 " 的EndpointId 」:「 d8e1566da5b6ad7ad1a6e180ebb13239477b454cfe7f7ef70b7859c3bd4d0d67」, 「MACADDRESS」: 「02:42:AC:16:00:03」, 「IPv4Address」: 「172.22.0.3/16」, 「IPv6Address」: 「」} }, 「選項」:{ }, 「標籤」:{}}

]

還有人遇到和我同樣的問題?任何建議非常讚賞!

+0

您使用的是什麼虛擬機? VirtualBox,KVM等。另外,什麼版本的Docker?您可能想要嘗試在您的Compose文件中爲您的訂購者容器設置dns-search字段。請參閱https://stackoverflow.com/a/45916717/6160507(這是針對同行,但您可以對訂購者進行相同的更改) –

+0

非常感謝您的及時回覆。我使用的是VMware®Workstation 12 Pro 12.5.2 build-4638234。 Docker版本17.03.1-ce。我會嘗試你的建議,非常感謝! –

+0

你好,加里辛吉......非常感謝你的建議。其作品。我可以問一下指定的dns_search =的目的嗎?在yaml文件中?非常感謝您的幫助! –

回答

1

dial tcp: lookup kafka2 on 127.0.0.11:53: dial udp 127.0.0.11:53: i/o timeout orderer0.example.com

上述錯誤表明,訂貨者試圖主機kafka2做DNS查找,然後超時試圖連接到地址從DNS返回。

我的猜測是,當在NAT模式下運行虛擬機時,最終會使用主機的DNS設置,並且可能主機的DNS設置爲在某些特定的DNS域中搜索DNS名稱 - 例如搜索域可能是像search.com所以DNS試圖解決kafka2 as kafka2.search.com。可能您使用的互聯網提供商以某種方式將其解析爲地址,然後訂購者嘗試連接到該地址。

爲了覆蓋Docker中的這種行爲,您可以在您的Compose文件中爲您的訂購人容器設置dns-search字段。請參閱stackoverflow.com/a/45916717/6160507(這是針對同行的,但您可以對訂購者進行相同的更改)。使用此設置,它不會附加DNS後綴,只會嘗試解決kafka2然後通過Docker的嵌入式DNS解析爲容器IP