如何使用我的本地 go 包构建 docker 图像?
How to build docker image with my local go package?
我的 main.go 文件路径:
/gowork/src/dockerpkgmain/main.go
我的包文件路径:
/gowork/src/dockerpkg/mult/mult.go
我的docker文件路径:
/gowork/src/dockerpkgmain/Dockerfile
main.go:
package main
import (
"dockerpkg/mult"
"fmt"
)
func main() {
fmt.Println("From different pkg")
mult.Multiple()
}
mult.go:
package mult
import (
"flag"
"fmt"
)
func Multiple() {
first := flag.Int("f", 0, "placeholder")
second := flag.Int("s", 0, "placeholder")
flag.Parse()
out := (*first) * (*second)
fmt.Println(out)
}
Docker 文件:
FROM golang:1.9.1
COPY . /go/src/dockerpkg/mult
WORKDIR /go/src/app
COPY . .
ADD . /go/src/dockerpkg/mult
RUN go get -d -v ./...
RUN go install -v ./...
CMD ["app"]
ENTRYPOINT ["app", "-f=7", "-s=9"]
如果我尝试
COPY . /go/src/dockerpkg/mult
我知道了:
main.go:4:2: import "dockerpkg/mult" is a program, not an importable
package
我必须在我的 docker 文件中放入什么才能在不更改项目结构的情况下构建我的图像?
根据您的文件夹布局,我猜您的本地 $GOPATH 是 /gowork
文件夹。在 golang docker 镜像中,它的 $GOPATH 是 /go
文件夹。
您必须在此位置 /gowork/src/Dockerfile
中创建 docker 文件,然后将以下内容放入其中。它在我的环境中使用您的代码运行良好。
FROM golang:1.9.1
COPY ./dockerpkg /go/src/dockerpkg
WORKDIR /go/src/app
COPY ./dockerpkgmain .
RUN go get -d -v ./...
RUN go install -v ./...
CMD ["app"]
我的 main.go 文件路径: /gowork/src/dockerpkgmain/main.go
我的包文件路径: /gowork/src/dockerpkg/mult/mult.go
我的docker文件路径: /gowork/src/dockerpkgmain/Dockerfile
main.go:
package main
import (
"dockerpkg/mult"
"fmt"
)
func main() {
fmt.Println("From different pkg")
mult.Multiple()
}
mult.go:
package mult
import (
"flag"
"fmt"
)
func Multiple() {
first := flag.Int("f", 0, "placeholder")
second := flag.Int("s", 0, "placeholder")
flag.Parse()
out := (*first) * (*second)
fmt.Println(out)
}
Docker 文件:
FROM golang:1.9.1
COPY . /go/src/dockerpkg/mult
WORKDIR /go/src/app
COPY . .
ADD . /go/src/dockerpkg/mult
RUN go get -d -v ./...
RUN go install -v ./...
CMD ["app"]
ENTRYPOINT ["app", "-f=7", "-s=9"]
如果我尝试
COPY . /go/src/dockerpkg/mult
我知道了:
main.go:4:2: import "dockerpkg/mult" is a program, not an importable package
我必须在我的 docker 文件中放入什么才能在不更改项目结构的情况下构建我的图像?
根据您的文件夹布局,我猜您的本地 $GOPATH 是 /gowork
文件夹。在 golang docker 镜像中,它的 $GOPATH 是 /go
文件夹。
您必须在此位置 /gowork/src/Dockerfile
中创建 docker 文件,然后将以下内容放入其中。它在我的环境中使用您的代码运行良好。
FROM golang:1.9.1
COPY ./dockerpkg /go/src/dockerpkg
WORKDIR /go/src/app
COPY ./dockerpkgmain .
RUN go get -d -v ./...
RUN go install -v ./...
CMD ["app"]