这是我的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
命令。
发生了什么事?
答案 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}
答案 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/