Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么我在docker公司拿到404分_Docker_Go_Routing - Fatal编程技术网

为什么我在docker公司拿到404分

为什么我在docker公司拿到404分,docker,go,routing,Docker,Go,Routing,这是我的文件 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 WORKD

这是我的文件

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 /usr/bin
COPY --from=build /go/src/app/bin /go/bin
EXPOSE 80
ENTRYPOINT /go/bin/web-app --port 80
这是一个简单的main.go:

package main

import (
    "fmt"
    "net/http"
)

func main() {
    http.Handle("/", http.FileServer(http.Dir("./public")))
    log.Fatal(http.ListenAndServe(":80", nil))
}

公用目录与main.go文件位于同一文件夹中。公共目录中有一个index.html。
当我运行
go运行main.go
时,我的网站服务正常。但是有了Docker,我得到了404页。我怀疑这与docker容器中文件的位置有关。非常感谢您的帮助。

我认为您需要在您的
alpine
容器中创建文件夹:

RUN mkdir -p /go/bin/public
确保文件夹里有东西

或者,您需要从first go容器复制文件夹和文件

并编辑您的dokcerfile:

WORKDIR /go/bin
ENTRYPOINT web-app --port 80

正如LinPy提到的,您应该将公用文件夹从build复制到alpine

您必须将WORKDIR设置为/go,以使相对路径正常工作

例如

ENTRYPOINT./web应用程序--端口80
工作正常。与公用文件夹处于同一级别。
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