docker - 容器中的 Go API 不返回任何响应

标签 docker go

我有一个使用 Mux 用 GO 编写的简单 API。

在本地运行时它可以工作,但我正在尝试将此应用程序容器化。

我的 main.go 看起来像这样

package main

import (
    "net/http"
    "time"
    "log"
    "github.com/gorilla/mux"
    "github.com/<username>/tweet-media-api/controllers"
)

func main() {

    r := mux.NewRouter()

    c := controllers.Controller{}

    r.HandleFunc("/", c.BaseRoute()).Methods("GET")
    r.HandleFunc("/healthz", c.HealthzRoute()).Methods("GET")

    srv := &http.Server{
        Handler:      r,
        Addr:         "127.0.0.1:8080",
        WriteTimeout: 15 * time.Second,
        ReadTimeout:  15 * time.Second,
    }

    log.Fatal(srv.ListenAndServe())
}

我的项目基本上是这样安排的

enter image description here

我正在使用 go version go1.11.4 darwin/amd64 我的项目正在使用 go modules。

我尝试创建一个多阶段 Dockerfile,如下所示

# build stage
FROM golang:alpine AS build-env
ADD . /src
RUN apk update && apk upgrade && apk add --no-cache git
RUN cd /src && go build -o goapp

# final stage
FROM alpine
WORKDIR /app
COPY --from=build-env /src/goapp /app/
EXPOSE 8080
ENTRYPOINT ./goapp

我运行 docker build 。 -t my-app 在项目的根目录中,这完成了

Successfully built ebb41cfbef59
Successfully tagged my-app:latest

但是,当我运行 docker run -p 8080:8080 my-app 时,终端没有输出,并且在 http://localhost:8080/ 上发出了 curl 请求> 没有回应。这对于浏览器请求也是一样的。

我是 Docker 的新手,对为什么这个构建不起作用感到困惑。

我知道我的容器正在运行我添加的应用程序

fmt.Println("Running")

这被打印到控制台。

最佳答案

我认为您需要从 Addr 属性中删除主机部分。

srv := &http.Server{
    Handler:      r,
    Addr:         ":8080",
    WriteTimeout: 15 * time.Second,
    ReadTimeout:  15 * time.Second,
}

关于docker - 容器中的 Go API 不返回任何响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56312801/

相关文章:

linux - 如何在 mac OS 中将主机 ip 地址传递给 docker?

GO - net/http - 如何获取请求字符串和方法

http - panic : close of closed channel during persistent http call in GO(golang)

go - 多个查询的正确方法 Go Rest API

go - 如何在 Go 中创建使用 TLS 客户端身份验证的测试服务器?

multithreading - 我们可以在 docker 中运行多进程程序吗?

mysql - 无法将 mysql 与 laravel (docker) 连接

windows - 在 Windows 上使用 docker compose 进行卷绑定(bind)

windows - 如何在 Windows 上运行 ubuntu 容器?

mongodb - 无法安装最新版本的mongo-go-driver(v1.2.1)