質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

gRPC

gRPCは、グーグル社が開発した通信プロトコルの一つ。Protocol Buffersを用いてシリアライズしバイナリに変換させるため、高速なRPCを実現することができます。また、プログラマは意識せずにHTTP/2を利用できることも特徴です。

Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

1回答

3345閲覧

dockerでのgrpc-gatewayによる通信で通信エラーが発生してしまう。

pandama09396862

総合スコア6

docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

gRPC

gRPCは、グーグル社が開発した通信プロトコルの一つ。Protocol Buffersを用いてシリアライズしバイナリに変換させるため、高速なRPCを実現することができます。また、プログラマは意識せずにHTTP/2を利用できることも特徴です。

Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

0グッド

0クリップ

投稿2022/02/06 03:23

お世話になってります。
ローカル環境にてGolang+grpc-gatewayで個人開発を行っています。
Dockerを使わずにGoサーバーとgatewayサーバー間ではRESTapi通信を行うことに成功したのですがdocker-composeに変えたところ

{ "error": "connection error: desc = \"transport: Error while dialing dial tcp 127.0.0.1:8080: connect: connection refused\"", "code": 14, "message": "connection error: desc = \"transport: Error while dialing dial tcp 127.0.0.1:8080: connect: connection refused\"" }

上記のエラーがでるようになりました。Goサーバー、gatewayサーバーのロジック変更はしていないのでDockerfile,またはdocker-compose.ymlの設定が間違っていると思われるのですが解決できず苦戦しております。
エラー解決をお手伝いして頂ける方を探しています。

docker-compose.yml

version: '3' services: shop_grpc: build: context: ./backend/server/shopping dockerfile: ../docker/Dockerfile.shopping target: dev stdin_open: true tty: true ports: - 8080:8080 volumes: - ./backend/server:/go/src/shopping/backend/server gateway: build: context: ./backend/server/gateway dockerfile: ../docker/Dockerfile.gateway target: dev container_name: gateway stdin_open: true tty: true ports: - 9999:9999 volumes: - ./backend/server:/go/src/shopping/backend/server

gatewayサーバのDockerfile

FROM golang:latest as dev COPY . . WORKDIR /go/src/shopping/backend/server/gateway EXPOSE 9999 CMD ["go", "run", "main.go"]

GoサーバのDockerfile

FROM golang:latest as dev COPY . . WORKDIR /go/src/shopping/backend/server/shopping EXPOSE 8080 CMD ["go", "run", "main.go"]

gateway/main.go

package main import ( "flag" "fmt" "net/http" "github.com/golang/glog" "github.com/grpc-ecosystem/grpc-gateway/runtime" pw_test "github.com/shimo0108/shopping/backend/server/pb/test" "golang.org/x/net/context" "google.golang.org/grpc" ) func run() error { ctx := context.Background() ctx, cancel := context.WithCancel(ctx) defer cancel() mux := runtime.NewServeMux() opts := []grpc.DialOption{grpc.WithInsecure()} endpoint := fmt.Sprintf("localhost:8080") err := pw_test.RegisterTestServiceHandlerFromEndpoint(ctx, mux, endpoint, opts) if err != nil { fmt.Printf("serve: %v\n", err) } return http.ListenAndServe(":9999", mux) } func main() { flag.Parse() defer glog.Flush() if err := run(); err != nil { glog.Fatal(err) } }

shopping/main.go

package main import ( "context" "fmt" "log" "net" pb "github.com/shimo0108/shopping/backend/server/pb/test" "google.golang.org/grpc" ) type TestService struct { pb.UnimplementedTestServiceServer } func main() { fmt.Println("Go gRPC Beginners Tutorial!") lis, err := net.Listen("tcp", fmt.Sprintf(":%d", 8080)) if err != nil { log.Fatalf("failed to listen: %v", err) } grpcServer := grpc.NewServer() pb.RegisterTestServiceServer(grpcServer, &TestService{}) log.Printf("gRPC server start") if err := grpcServer.Serve(lis); err != nil { log.Fatalf("failed to serve: %s", err) } } func (grpcServer *TestService) Test(ctx context.Context, message *pb.TestRequest) (*pb.TestResponse, error) { log.Printf("Received: %v", message.Message) return &pb.TestResponse{Message: "Test " + message.Message}, nil }
% docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a9b54e5f7683 shopping_shop_grpc "go run main.go" 43 seconds ago Up 42 seconds 0.0.0.0:8080->8080/tcp, :::8080->8080/tcp shopping_shop_grpc_1 baa29a1015c8 shopping_gateway "go run main.go" 43 seconds ago Up 42 seconds 0.0.0.0:9999->9999/tcp, :::9999->9999/tcp gateway
% docker network ls NETWORK ID NAME DRIVER SCOPE b2222a151caa _default bridge local 6479de7b885b bridge bridge local dbf48ebd65ef host host local 9b2af41eb40b none null local d4dc05738338 shopping_default bridge local

dockerを使わずhttp://localhost:9999/test?message=success
を叩いた場合

{ "message": "Test success" }

docker-composeを起動しhttp://localhost:9999/test?message=success
を叩いた場合

{ "error": "connection error: desc = \"transport: Error while dialing dial tcp 127.0.0.1:8080: connect: connection refused\"", "code": 14, "message": "connection error: desc = \"transport: Error while dialing dial tcp 127.0.0.1:8080: connect: connection refused\"" }

エラー解決にご協力いただけると幸いです。よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

gateway/main.go のendpointに"localhost:8080"が指定されていることが原因と思われます。

golang

1endpoint := fmt.Sprintf("localhost:8080")

"shop_grpc:8080" に変更すると動きそうですが、いかがでしょう?

投稿2022/11/25 07:38

guildhub

総合スコア2

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問