5

我正在迁移一些代码以使用 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 .

当 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)

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

4

1 回答 1

3

确保为项目正确初始化模块

go mod init github.com/triplestrange/StrangeScout/goscout

所以你的内容go.mod

module github.com/triplestrange/StrangeScout/goscout

然后你可以使用你当前的 Dockerfile而不做任何改变

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

➜ docker build -t goscout 。
将构建上下文发送到 Docker 守护进程 47.1kB
步骤 1/11:来自 golang:latest AS builder
 ---> fb7a47d8605b
步骤 2/11:工作目录 /goscout
 ---> 在 e9786fe5ab53 中运行
移除中间容器 e9786fe5ab53
 ---> 6d101e346175
步骤 3/11:复制 ./ ./
 ---> 7081c0b47dc9
步骤 4/11:运行 go get -d -v ./...
 ---> 在 3ce69359ae88 中运行
去:找到github.com/go-sql-driver/mysql v1.4.0
去:找到github.com/gorilla/mux v1.6.2
去:下载github.com/gorilla/mux v1.6.2
go: 下载 github.com/go-sql-driver/mysql v1.4.0
卸下中间容器 3ce69359ae88

...


 ---> 3df0dbca80e5
成功搭建3df0dbca80e5
成功标记 goscout:latest
于 2018-10-01T21:41:45.543 回答