首页 > 解决方案 > GO / Golang 在 Docker 问题上运行项目 - 找不到包(内部文件夹)

问题描述

我正在尝试在 Docker 上运行我的第一个 Golang 项目。虽然我成功完成了一个简单的“hello world”应用程序,但我在一个稍微结构化的项目中遇到了一些困难。

该项目有一些文件夹,我在 main.go 文件中导入了这些文件夹。当我尝试在 Docker 上运行我的解决方案时,它在加载这些“包”时卡住了。

这是我的 Dockerfile

FROM golang:1.17-alpine

WORKDIR /app

COPY go.mod ./
COPY go.sum ./
RUN go mod download

COPY *.go ./

RUN go env GOROOT
RUN go build -o /my-api

EXPOSE 8080

CMD [ "/my-api" ]

这是我得到的错误

Step 8/10 : RUN go build -o /my-api
 ---> Running in c1c9d1058caa
main.go:10:2: package my-api/Repositories is not in GOROOT (/usr/local/go/src/my-api/Repositories)
main.go:11:2: package my-api/Settings is not in GOROOT (/usr/local/go/src/my-api/Settings)

我注意到的一件事是这条路

/usr/local/go/src/my-api/Settings

应该

/usr/local/gocode/src/my-api/Settings

在我的本地机器上

这是我的项目结构的一瞥

在此处输入图像描述

有任何想法吗?

标签: dockergocontainersgoogle-app-engine-golang

解决方案


为什么不使用像这样的 Dockerfile:

FROM golang:1.17-alpine
RUN apk add build-base

WORKDIR /app

ADD . /app
RUN go build -o /my-api

EXPOSE 8080

CMD [ "/my-api" ]

这会将本地计算机上本地目录的内容复制到/app映像中。

注意:要构建“生产级”图像,我会使用多阶段构建:

FROM golang:1.17-alpine as builder
RUN apk add build-base

WORKDIR /app
ADD . /app
RUN go build -o /my-api

FROM alpine:3.14
COPY --from=builder /my-api /
EXPOSE 8080
CMD [ "/my-api" ]

推荐阅读