Mux Router 在 Dockerized golang 项目中不起作用

Mux Router doesn't work in Dockerized golang project

我在本地测试过,在我的本地完全没问题。 我可以从 POST、GET 方法获得响应。

但是当我 docker 启动应用程序并尝试测试相同的端点时,我什么也没得到。 我已经尝试了 Whosebug 中的所有建议。所以我将粘贴我的 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 .

然后我运行它。

我看到应用程序 运行ning 并且 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") 不会 return 为空。我确定。 我写了一些调试注释,据我所知,代码甚至连调试注释都没有。所以它根本不打印任何东西。

您在容器内使用的端口可能没有暴露给外界,因此您无法访问它们。尝试添加 -p 标志,如下所示:

docker run -p P1:P2

P1 = TCP 端口

P2 = 集装箱港口

请参考:this doc