docker - 如何为微服务应用程序配置 docker 公开端口?

标签 docker go microservices go-micro

请问,学习过go-micro,知道微服务客户端不需要知道微服务部署在哪个ip和端口。服务自己运行时,端口是随机设置的,服务由其服务名称定位,如 go.micro.api.user

服务端运行如下:

     userService := micro.NewService(micro.Name("go.micro.api.user"))
     userService.Init()
     user.RegisterUserHandler(userService.Server(), new(User), api.WithEndpoint(&api.Endpoint{
          Name: "User.GetToken",
          Path: []string{"/user/token/"},
          Method: []string{"POST"},
          Handler: http.Handler,
     }),api.WithEndpoint(&api.Endpoint{
          Name: "User.GetUserName",
          Path: []string{"/user/username/"},
          Method: []string{"GET"},
          Handler: http.Handler,
     }))

    if er := userService.Run(); er != nil {
        panic(er)
    }

客户端喜欢:

    service := micro.NewService(micro.Name("go.micro.api.user"))
    service.Init()

    // Create new greeter client
    userService := user.NewUserService("go.micro.api.user", service.Client())

    // Call the greeter
    rsp, err := userService.GetToken(context.TODO(), &user.Request{Username: "John", Password: "123"})
    if err != nil {
        fmt.Println(err)
        return
    }

    // Print response
    fmt.Println(rsp)

要在docker中部署微服务,我不知道如何在docker容器中配置端口。

最佳答案

您可以使用 server_address 标志(参见 cli package )或 MICRO_SERVER_ADDRESS env var(参见 cmd doc )为 go-micro 服务器设置端口。

一旦你这样做了,我建议你先尝试连接到你的服务而不 Docker。一切正常后,您可以使用 Docker 运行它,using the -p flag .

关于docker - 如何为微服务应用程序配置 docker 公开端口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54801203/

相关文章:

node.js - 在 Nodejs 中构建微服务的更好方法

mongodb - Docker添加其他参数以启动

ruby-on-rails - 无法与docker-compose同步文件

docker - .NET Core Web应用程序无法在Docker容器中运行

pointers - 映射的键作为结构体的指针? (用例)

c# - 用于用户表示的 Service Fabric 服务与 Service Fabric Actors

python - 您如何将 celery 整合到 flask + Redis中?

go - 如何检查接口(interface){}是否是一个 slice

arrays - 如何解析下面格式的json数组

docker - 使用 Docker Compose 的微服务 : Same Container, 多个项目