在Docker构建中为自己的软件包使用1.11未知的导入路径

aid*_*010 5 go docker go-modules

我正在迁移一些代码以与Go 1.11模块一起使用,并且能够从Shell中构建它,但不能在Docker中构建它。

相关的Dockerfile部分:

WORKDIR /goscout
COPY ["go.mod", "go.sum", "./"]
RUN GO111MODULE=on go get -u=patch
COPY *.go ./
RUN GO111MODULE=on go build -v -ldflags "-linkmode external -extldflags -static" -o GoScout -a .
Run Code Online (Sandbox Code Playgroud)

当Docker运行以上摘录中的最后一条命令时,我收到此错误:

can't load package: package github.com/triplestrange/StrangeScout/goscout: unknown import path "github.com/triplestrange/StrangeScout/goscout": ambiguous import: found github.com/triplestrange/StrangeScout/goscout in multiple modules:
    github.com/triplestrange/StrangeScout/goscout (/goscout)
    github.com/triplestrange/StrangeScout v0.3.0 (/go/pkg/mod/github.com/triplestrange/!strange!scout@v0.3.0/goscout)
Run Code Online (Sandbox Code Playgroud)

我没有在外壳中得到这个,所以我猜我没有正确地复制一些文件。但是在运行此命令之前,我已经复制了go.modgo.sum*.go,所以我不知道可能会丢失什么。

pet*_*erm 3

确保您为您的项目正确初始化了模块

\n\n
go mod init github.com/triplestrange/StrangeScout/goscout\n
Run Code Online (Sandbox Code Playgroud)\n\n

这样你的内容go.mod就是

\n\n
module github.com/triplestrange/StrangeScout/goscout\n
Run Code Online (Sandbox Code Playgroud)\n\n

然后您可以使用当前的 Dockerfile,无需任何更改

\n\n

无需设置,GO111MODULE=on因为您在go外部运行命令$GOPATH

\n\n
\n\xe2\x9e\x9c docker build -t goscout 。\n将构建上下文发送到 Docker 守护进程 47.1kB\n步骤 1/11 : FROM golang:latest AS builder\n ---> fb7a47d8605b\n步骤 2/11 : WORKDIR / goscout\n ---> 在 e9786fe5ab53 中运行\n删除中间容器 e9786fe5ab53\n ---> 6d101e346175\n步骤 3/11 : COPY ./ ./\n ---> 7081c0b47dc9\n步骤 4/11 : RUN go get - d -v ./...\n ---> 在 3ce69359ae88\ngo 中运行:查找 github.com/go-sql-driver/mysql v1.4.0\ngo:查找 github.com/gorilla/mux v1.6.2\ ngo:下载 github.com/gorilla/mux v1.6.2\ngo:下载 github.com/go-sql-driver/mysql v1.4.0\n删除中间容器 3ce69359ae88\n\n...\n\n\n - --> 3df0dbca80e5\n成功构建 3df0dbca80e5\n成功标记 goscout:latest\n
\n