gpt4 book ai didi

docker - 我在为 golang api 构建 docker 时遇到问题

转载 作者:行者123 更新时间:2023-12-01 22:32:53 24 4
gpt4 key购买 nike

我是 docker 的新手。

我正在尝试使用回显服务器在 go 中实现 RESTfull api。当我运行 main.go 时,我的代码运行良好但我无法使用 docker 运行它。

这是我的回声服务器:

r := router.Router()
r.Logger.Fatal(r.Start("localhost:8080"))

这是我的 Dockerfile:
FROM golang:latest AS build

ENV GO111MODULE=on \
CGO_ENABLED=1

#Maintainer info
LABEL maintainer="Saman Hoseini"

WORKDIR /app

COPY go.mod .
COPY go.sum .

RUN go mod download

COPY . .

RUN go build -o main .

#this step is for CGO libraries
RUN ldd main | tr -s '[:blank:]' '\n' | grep '^/' | \
xargs -I % sh -c 'mkdir -p $(dirname ./%); cp % ./%;'
RUN mkdir -p lib64 && cp /lib64/ld-linux-x86-64.so.2 lib64/

#Second stage of build
FROM alpine:latest
RUN apk update && apk --no-cache add ca-certificates \
sqlite

COPY --from=build /app ./

EXPOSE 8080

ENTRYPOINT ["./main"]

构建后,当我运行容器时,我面临 curl 失败:

$ docker run -d -p 8080:8080 my-docker

$ curl http://localhost:8080

curl: (56) Recv failure: Connection reset by peer



我该如何解决这个问题?

最佳答案

您需要在容器的外部端口上运行您的应用程序。

r := router.Router()
r.Logger.Fatal(r.Start(":8080"))

发生这种情况是因为 EXPOSE 8080命令转发在容器的外部端口(不是内部,如 localhost)上打开的应用程序端口。

在此之后,命令 docker run -d -p 8080:8080 my-docker ,更准确地说是参数 -p ,将外部端口从您的容器转发到您机器上的外部端口。

关于docker - 我在为 golang api 构建 docker 时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59742389/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com