在 Docker 构建中为自己的包转到 1.11 未知导入路径
Go 1.11 unknown import path for own package in Docker build
我正在迁移一些代码以使用 Go 1.11 模块,我可以从 shell 构建它,但不能在 Docker.
中构建它
相关 Docker 文件部分:
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.mod
、go.sum
和 *.go
,所以我不知道可能遗漏了什么。
确保您为项目正确初始化了模块
go mod init github.com/triplestrange/StrangeScout/goscout
这样你的go.mod
的内容就是
module github.com/triplestrange/StrangeScout/goscout
然后您可以使用当前的 Dockerfile 而无需任何更改。
无需设置 GO111MODULE=on
,因为您在 $GOPATH
之外执行 运行 go
命令
➜ docker build -t goscout .
Sending build context to Docker daemon 47.1kB
Step 1/11 : FROM golang:latest AS builder
---> fb7a47d8605b
Step 2/11 : WORKDIR /goscout
---> Running in e9786fe5ab53
Removing intermediate container e9786fe5ab53
---> 6d101e346175
Step 3/11 : COPY ./ ./
---> 7081c0b47dc9
Step 4/11 : RUN go get -d -v ./...
---> Running in 3ce69359ae88
go: finding github.com/go-sql-driver/mysql v1.4.0
go: finding github.com/gorilla/mux v1.6.2
go: downloading github.com/gorilla/mux v1.6.2
go: downloading github.com/go-sql-driver/mysql v1.4.0
Removing intermediate container 3ce69359ae88
...
---> 3df0dbca80e5
Successfully built 3df0dbca80e5
Successfully tagged goscout:latest
我正在迁移一些代码以使用 Go 1.11 模块,我可以从 shell 构建它,但不能在 Docker.
中构建它相关 Docker 文件部分:
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.mod
、go.sum
和 *.go
,所以我不知道可能遗漏了什么。
确保您为项目正确初始化了模块
go mod init github.com/triplestrange/StrangeScout/goscout
这样你的go.mod
的内容就是
module github.com/triplestrange/StrangeScout/goscout
然后您可以使用当前的 Dockerfile 而无需任何更改。
无需设置 GO111MODULE=on
,因为您在 $GOPATH
go
命令
➜ docker build -t goscout . Sending build context to Docker daemon 47.1kB Step 1/11 : FROM golang:latest AS builder ---> fb7a47d8605b Step 2/11 : WORKDIR /goscout ---> Running in e9786fe5ab53 Removing intermediate container e9786fe5ab53 ---> 6d101e346175 Step 3/11 : COPY ./ ./ ---> 7081c0b47dc9 Step 4/11 : RUN go get -d -v ./... ---> Running in 3ce69359ae88 go: finding github.com/go-sql-driver/mysql v1.4.0 go: finding github.com/gorilla/mux v1.6.2 go: downloading github.com/gorilla/mux v1.6.2 go: downloading github.com/go-sql-driver/mysql v1.4.0 Removing intermediate container 3ce69359ae88 ... ---> 3df0dbca80e5 Successfully built 3df0dbca80e5 Successfully tagged goscout:latest