在Dockerfile中获取Protobuf的错误
这是我的Dockerfile:
FROM golang RUN apt-get update RUN go get -u github.com/golang/protobuf/{proto,protoc-gen-go}
这会产生这个错误:
package github.com/golang/protobuf/{proto,protoc-gen-go}: invalid github.com/ import path "github.com/golang/protobuf/{proto,protoc-gen-go}"
但是,如果我取出那个RUN
指令,并且在docker容器中加载/bin/bash
,我可以运行go get
命令就好了。
这是怎么回事?
它工作,如果我使用另一个壳,如bash,并把双引号为go
命令
RUN bash -c "go get github.com/golang/protobuf/{proto,protoc-gen-go}"
顺便说一下,你可以只用一个RUN来完成所有工作,参见Dockerfiles的最佳实践
https://docs.docker.com/engine/userguide/eng-image/dockerfile_best-practices/
这是因为默认的shell 不是 /bin/bash
,而是sh
。 你有两种可能的解决scheme,你可以在你的RUN命令中明确地定义一个shell,像这样:
RUN ["/bin/bash", "-c", "go get -u github.com/golang/protobuf/{proto,protoc-gen-go}"]
或者,您可以更改RUN
默认使用的shell程序,如下所示:
SHELL ["/bin/bash", "-c"] RUN go get -u github.com/golang/protobuf/{proto,protoc-gen-go}
来源: https : //docs.docker.com/engine/reference/builder/#/shell