プロジェクトのシナリオ:
docker を使用してマイクロサービスをデプロイして起動すると、nacos に接続できないことが判明し、マイクロサービスが nacos を読み取れずにエラーが報告され、起動に失敗しました。
問題の説明
cancremote.client.grpc.GrpcClient : サーバー チェックに失敗しました。サーバー XXX.X.XXX.XXX を確認してください。ポート XXX は利用可能です。エラー ={}
java.util.concurrent.TimeoutException: com.alibaba.nacos.shaded.io.grpc.stub.ClientCalls$GrpcFuture@442675e1[status=PENDING, info=[GrpcFuture{clientCall={ delegate={delegate=ClientCallImpl{method=MethodDescriptor{fullMethodName=リクエスト/リクエスト、type=UNARY、idempotent=false、safe=false、sampledToLocalTracing=true、requestMarshaller=com.alibaba.nacos.shaded.io.grpc.protobuf.lite .ProtoLiteUtils$MessageMarshaller@6166e06f、responseMarshaller=com.alibaba.nacos.shaded.io.grpc.protobuf.lite.ProtoLiteUtils$MessageMarshaller@49e202ad、schemaDescriptor=com.alibaba.nacos.api.grpc.auto.RequestGrpc$RequestMethodDescriptorSupplier@1c72 da34 }}}}}]]
原因分析:
マイクロサービスを起動するとNacosにサービス情報が登録されますが、Nacosサービス登録用IPを選択すると内部ネットワークIPとして登録されるよう選択されるため、マイクロサービスが公開するパブリックIPポートとは通信できません。ホストが存在し、nacos. に接続して登録できないため、サービスの開始に失敗します。
解決:
1. サービス インスタンスがパブリック IP であることを宣言します。
spring:
cloud:
nacos:
discovery:
#你的服务器公网IP
ip: XXX.X.X.XXX
2.ホストモードを採用する
ホストの IP アドレスを使用するには、起動コマンドに--net=hostを追加します。
docker run --name XXXX --net=host