我的dockerfile:
FROM golang:1.14
RUN mkdir /app
ADD . /app
WORKDIR /app
RUN go build -o main .
CMD ["/app/main"]
错误:
main.go:11:2: cannot find package "github.com/gorilla/mux" in any of:
/usr/local/go/src/github.com/gorilla/mux (from $GOROOT)
/go/src/github.com/gorilla/mux (from $GOPATH)
我在GOPATH中的PATH是
GOPATH=/Users/pstrom/go
我来自javascript,在那里运行NPM INSTALL
,它将所有外部软件包添加到与项目相同的目录node_modules
中。
Go中是否有任何类似的命令?找不到任何东西。我不想在docker中添加任何PATH,因为我想从任何地方运行它。
如何在Go中处理Docker中的外部软件包?
答案 0 :(得分:5)
也请参阅评论。
可能需要创建一个go.mod
文件,其功能类似于package.json
。如果您没有go.mod
文件,而只想开始使用,可以在go mod init x
和main.go
旁边的目录中Dockerfile
。然后,要强制将软件包添加到go.mod
,您只需go run .
(或go run main.go
)。
然后:
FROM golang:1.15
WORKDIR /app
COPY go.mod .
RUN go mod download
COPY . .
RUN go build -o main .
ENTRYPOINT ["/app/main"]
WORKDIR
创建目录(如果不存在),因此您跳过mkdir
/app
在${GOPATH}
之外,这在使用模块时是正确的COPY
>> ADD
(我的偏爱)go mod download
获取在go.mod
中定义的依赖项COPY . .
其他所有内容,可能只需要成为COPY main.go .
ENTRYPOINT
>> CMD
,容器将默认运行二进制文件