2 回答
TA贡献1858条经验 获得超8个赞
您正在以分离 ( -d) 模式启动图像 - 这就是您看不到错误消息的原因。的问题很少Dockerfile,应该使用@andre 答案修复,但很可能您忘记重建图像并且没有看到效果。
我提交此答案是为了建议您对以下内容进行一些改进Dockerfile:
# first stage - builds the binary from sources
FROM golang:1.12.14-alpine3.10 as build
# using build as current directory
WORKDIR /build
# Add the source code:
COPY main.go ./
# install build deps
RUN apk --update --no-cache add git
# downloading dependencies and
# building server binary
RUN go get github.com/gorilla/mux && \
go build -o server .
# second stage - using minimal image to run the server
FROM alpine:3.10
# using /app as current directory
WORKDIR /app
# copy server binary from `build` layer
COPY --from=build /build/server server
# binary to run
CMD "/app/server"
EXPOSE 8080
我将您Dockerfile分为两个阶段:构建和运行。Build 阶段负责构建服务器二进制文件,run 阶段负责运行它。请参阅https://docs.docker.com/develop/develop-images/multistage-build/
然后我将多个RUNs 合并为一个:go get github.com/gorilla/mux && go build -o server .以避免创建冗余层。
我修复WORKDIR了 s 并赋予它们可读的语义名称。
不要忘记重建它docker build . -t goserver并运行它
docker run -p 8080:8080 --name goserver goserver
如果一切正常,并且您已准备好(并且需要)以分离模式启动,则添加-d标志。
此外,您可能需要检查Dockerfile 最佳实践。
TA贡献1851条经验 获得超4个赞
你WORKDIR是错的,基于你如何设置你的CMD
改变你的WORKDIR,SRC_DIR而不是,GOBIN它会工作
你也可以go install main.go在你的 Dockerfile 上运行
go install将创建可执行文件并将其移动到 bin 文件夹
这是一个工作 Dockerfile 的示例:
FROM golang:1
ENV SRC_DIR=/go/src/
ENV GOBIN=/go/bin
WORKDIR $SRC_DIR
# Add the source code:
ADD . $SRC_DIR
RUN go get github.com/gorilla/mux;
RUN go install main.go
WORKDIR $GOBIN
ENTRYPOINT ["./main"]
EXPOSE 8080
发生的事情是:您CMD失败了,因为WORKDIR指向 bin 文件夹。
- 2 回答
- 0 关注
- 149 浏览
添加回答
举报