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
我在本地测试过,在我的本地完全没问题。 我可以从 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