在Dockerfile中获取Protobuf时出错

Nar*_*tor 1 go docker

这是我的Dockerfile:

FROM golang
RUN apt-get update
RUN go get -u github.com/golang/protobuf/{proto,protoc-gen-go}
Run Code Online (Sandbox Code Playgroud)

这会生成此错误:

package github.com/golang/protobuf/{proto,protoc-gen-go}: invalid github.com/ import path "github.com/golang/protobuf/{proto,protoc-gen-go}"
Run Code Online (Sandbox Code Playgroud)

但是,如果我取出该RUN指令,只是加载/bin/bash到docker容器中,我就可以运行go get命令了.

这是怎么回事?

joh*_*s85 5

它正在发生,因为默认的shell 不是 /bin/bash,它是sh.您有两种可能的解决方案,您可以在RUN命令中明确定义shell,如下所示:

RUN ["/bin/bash", "-c", "go get -u github.com/golang/protobuf/{proto,protoc-gen-go}"]
Run Code Online (Sandbox Code Playgroud)

或者您可以更改RUN默认使用的shell,如下所示:

SHELL ["/bin/bash", "-c"]
RUN go get -u github.com/golang/protobuf/{proto,protoc-gen-go}
Run Code Online (Sandbox Code Playgroud)

资料来源:https://docs.docker.com/engine/reference/builder/#/shell