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

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

新規登録して質問してみよう
ただいま回答率
86.12%
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はプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

受付中

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

pandama09396862
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はプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

1回答

0グッド

0クリップ

1424閲覧

投稿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\"" }

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

以下のような質問にはグッドを送りましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

グッドが多くついた質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

回答1

0

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

golang

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

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

投稿2022/11/25 07:38

guildhub

総合スコア2

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

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

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

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

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

ただいまの回答率
86.12%

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

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

質問する

関連した質問

同じタグがついた質問を見る

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はプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。