首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Dockerfile中Protobuf的Go Get错误

Dockerfile中Protobuf的Go Get错误
EN

Stack Overflow用户
提问于 2016-10-12 16:20:30
回答 2查看 943关注 0票数 1

这是我的Dockerfile:

代码语言:javascript
复制
FROM golang
RUN apt-get update
RUN go get -u github.com/golang/protobuf/{proto,protoc-gen-go}

这将生成以下错误:

代码语言:javascript
复制
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命令了。

到底怎么回事?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-10-12 17:45:29

如果我使用另一个shell,比如bash,并为go命令放置双引号,它就能工作。

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

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

best-practices/

票数 3
EN

Stack Overflow用户

发布于 2016-10-12 17:43:50

之所以会发生这种情况,是因为默认的shell不是/bin/bash,而是sh。您有两个可能的解决方案,要么可以在RUN命令中显式定义shell,如下所示:

代码语言:javascript
复制
RUN ["/bin/bash", "-c", "go get -u github.com/golang/protobuf/{proto,protoc-gen-go}"]

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

代码语言:javascript
复制
SHELL ["/bin/bash", "-c"]
RUN go get -u github.com/golang/protobuf/{proto,protoc-gen-go}

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

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40003577

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档