这是我的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命令了.
这是怎么回事?
它正在发生,因为默认的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