【发布时间】:2021-10-18 13:33:07
【问题描述】:
我在本地进行了测试,它在我的本地运行良好。 我可以从 POST、GET 方法中获得响应。
但是当我将应用程序 dockerize 并尝试测试相同的端点时,我什么也得不到。 我已经尝试了 Stackoverflow 中的所有建议。因此,我将粘贴我的 Dockerfile 和 Makefile 以征求您的意见。
我的 Dockerfile:
FROM golang:1.16.5 AS build-env
RUN set -x \
&& apt-get update -y \
&& apt-get install -y locales \
make \
xz-utils \
zip \
&& rm -rf /var/lib/apt/lists/*
FROM build-env AS builder
WORKDIR /build
COPY . .
RUN set -x \
&& make
FROM debian:buster AS runner
RUN set -x \
&& apt-get update -y \
&& apt-get install -y ca-certificates \
&& rm -rf /var/lib/apt/lists/* \
&& update-ca-certificates
COPY --from=builder /build/bin/* .
CMD ["./applicaitonx"]
还有我的 Makefile:
build:
go build -o bin/applicaitonx -v -buildmode=exe .
为了能够构建 docker,我使用以下命令;
docker build -t app .
然后我运行它。
我看到应用程序正在运行,并且 listenandserve 根本没有抛出错误。但是 mux 根本没有路由。
它说它在听,但它没有。
main.go下面的部分我也复制一下
srv := &http.Server{
Handler: router,
Addr: ":" + os.Getenv("PORT"),
}
if err := srv.ListenAndServe(); err != nil {
log.Fatal("ListenAndServe: ", err)
}
我检查了所有环境变量,所以os.GetEnv("PORT") 不会返回 null。我很确定。
我写了一些调试 cmets,据我所知,代码甚至没有调试 cmets。所以它根本不打印任何东西。
【问题讨论】:
-
你怎么称呼那个端点?
-
我只是使用 Postman 来完成,但我的套接字挂断了。我什至尝试使用 curl 但从服务器得到空响应。当我查看日志时,我发现它没有命中调试 cmets。多路复用器根本不起作用。
-
curl -v在您的端点上报告什么? -
你调用的 URL 是什么?
-
能否请您也附上 docker image run 命令,我认为端口映射没有到位,因此您可能无法访问应用程序?
标签: docker rest go gorilla mux