2 回答

TA貢獻(xiàn)1858條經(jīng)驗(yàn) 獲得超8個(gè)贊
您正在以分離 ( -d) 模式啟動(dòng)圖像 - 這就是您看不到錯(cuò)誤消息的原因。的問(wèn)題很少Dockerfile,應(yīng)該使用@andre 答案修復(fù),但很可能您忘記重建圖像并且沒(méi)有看到效果。
我提交此答案是為了建議您對(duì)以下內(nèi)容進(jìn)行一些改進(jìn)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分為兩個(gè)階段:構(gòu)建和運(yùn)行。Build 階段負(fù)責(zé)構(gòu)建服務(wù)器二進(jìn)制文件,run 階段負(fù)責(zé)運(yùn)行它。請(qǐng)參閱https://docs.docker.com/develop/develop-images/multistage-build/
然后我將多個(gè)RUNs 合并為一個(gè):go get github.com/gorilla/mux && go build -o server .以避免創(chuàng)建冗余層。
我修復(fù)WORKDIR了 s 并賦予它們可讀的語(yǔ)義名稱。
不要忘記重建它docker build . -t goserver并運(yùn)行它
docker run -p 8080:8080 --name goserver goserver
如果一切正常,并且您已準(zhǔn)備好(并且需要)以分離模式啟動(dòng),則添加-d標(biāo)志。
此外,您可能需要檢查Dockerfile 最佳實(shí)踐。

TA貢獻(xiàn)1851條經(jīng)驗(yàn) 獲得超4個(gè)贊
你WORKDIR是錯(cuò)的,基于你如何設(shè)置你的CMD
改變你的WORKDIR,SRC_DIR而不是,GOBIN它會(huì)工作
你也可以go install main.go在你的 Dockerfile 上運(yùn)行
go install將創(chuàng)建可執(zhí)行文件并將其移動(dòng)到 bin 文件夾
這是一個(gè)工作 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
發(fā)生的事情是:您CMD失敗了,因?yàn)閃ORKDIR指向 bin 文件夾。
- 2 回答
- 0 關(guān)注
- 173 瀏覽
添加回答
舉報(bào)