這是我的 DockerfileFROM golang:alpine AS buildRUN apk --no-cache add gcc g++ make gitWORKDIR /go/src/appCOPY . .RUN go get ./...RUN GOOS=linux go build -ldflags="-s -w" -o ./bin/web-app ./main.goFROM alpine:3.9RUN apk --no-cache add ca-certificatesWORKDIR /usr/binCOPY --from=build /go/src/app/bin /go/binEXPOSE 80ENTRYPOINT /go/bin/web-app --port 80這是一個簡單的 main.go:package mainimport ( "fmt" "net/http")func main() { http.Handle("/", http.FileServer(http.Dir("./public"))) log.Fatal(http.ListenAndServe(":80", nil))}public目錄與main.go文件位于同一文件夾中。public目錄下有一個index.html。當我運行go run main.go我的網站時,服務正常。但是使用 Docker,我得到了 404 頁面。我懷疑這與 docker 容器內文件的放置有關。任何幫助表示贊賞。
2 回答

慕仙森
TA貢獻1827條經驗 獲得超8個贊
我認為您需要在alpine
容器中創建文件夾:
RUN mkdir -p /go/bin/public
并確保該文件夾中有一些東西。
或者您需要從第一個 go 容器復制文件夾和文件。
并編輯你的 dokcerfile :
WORKDIR /go/bin ENTRYPOINT web-app --port 80

神不在的星期二
TA貢獻1963條經驗 獲得超6個贊
您應該將公共文件夾從 build 復制到 alpine
并且您必須將 WORKDIR 設置為 /go 才能使相對路徑起作用
例如。
FROM golang:alpine AS build
RUN apk --no-cache add gcc g++ make git
WORKDIR /go/src/app
COPY . .
RUN go get ./...
RUN GOOS=linux go build -ldflags="-s -w" -o ./bin/web-app ./main.go
FROM alpine:3.9
RUN apk --no-cache add ca-certificates
WORKDIR /go
COPY --from=build /go/src/app/bin /go/bin
COPY --from=build /go/src/app/public /go/public
EXPOSE 80
ENTRYPOINT /go/bin/web-app --port 80
- 2 回答
- 0 關注
- 187 瀏覽
添加回答
舉報
0/150
提交
取消