我试着按照教程中的方法去做,但由于某些原因,由于我的目录是如何设置的,我似乎无法创建一个dockerfile来为我的web应用创建一个docker容器,这样我就可以使用docker在多个设备上运行它。
以下是我的项目结构:
MyApp
/cmd
/web
- main.go
- middleware.go
- routes.go
/pkg
/somepackage
- somegolangfile.go
/anotherpackageIuse
- somegolangfile.go
/templates
-HTML files
go.mod
go.sum
.gitignore
Dockerfile
下面是我使用的dockerfile:
FROM golang:latest as build
WORKDIR /build
COPY . .
RUN go build -o app .
FROM alpine:latest as run
WORKDIR /app
COPY --from=build /build/app .
ENTRYPOINT ["/app/app"]
我得到的错误是/build中没有go文件。这是正确的,错误是有意义的,因为go文件在cmd/web/中。
但是,我似乎不能解决它。我试过这样做:
FROM golang:latest as build
WORKDIR /build
COPY . .
RUN go build cmd/web/ -o app .
FROM alpine:latest as run
WORKDIR /app
COPY --from=build /build/app .
ENTRYPOINT ["/app/app"]
2条答案
按热度按时间3qpi33ja1#
你的build命令中多了一个点,参数顺序错误:
oalqel3c2#
嘿@Radin Khosraviani,
copy . .
只会复制源代码。您还需要复制Go module files
。下面我修改了你的docker文件,并添加了
COPY go.mod .
COPY go.sum .
RUN go mod download