在Dockerfile中使用Go获取Protobuf出错

时间:2016-10-12 16:20:31

标签: go docker

这是我的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命令。

发生了什么事?

2 个答案:

答案 0 :(得分:5)

这种情况正在发生,因为默认的shell是而不是 /bin/bash,它是sh。您有两种可能的解决方案,您可以在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

答案 1 :(得分:3)

如果我使用另一个shell(如bash)并为go命令添加双引号

RUN bash -c "go get github.com/golang/protobuf/{proto,protoc-gen-go}"

顺便说一句,你只能在一次运行中完成所有操作,请参阅Dockerfiles最佳实践

https://docs.docker.com/engine/userguide/eng-image/dockerfile_best-practices/