我在为 golang api 构建 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失败:对等方重置连接


我该如何解决这个问题?


森林海
浏览 121回答 1
1回答

慕无忌1623718

您需要在容器的外部端口上运行您的应用程序。r := router.Router() r.Logger.Fatal(r.Start(":8080"))发生这种情况是因为该EXPOSE 8080命令转发在容器的外部端口(不是内部,如 localhost)上打开的应用程序端口。在此之后, command docker run -d -p 8080:8080 my-docker,更准确地说是一个 parameter -p,将外部端口从您的容器转发到您机器上的外部端口。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go