go get -u google.golang.org/grpc被墙的解决方法

cnwinds · · 2135 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

使用golang开发grpc的应用时,需要安装grpc包。grpc包有将近200M,由于国内墙的原因,使用go get命令基本都是拉取失败。就算用vpn翻墙拉取也很慢。这里把构件docke镜像时需要的grpc依赖文件打包,方便以后使用。

正常构建的dockerfile如下

FROM golang:alpine AS builder
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories
RUN apk add git
RUN go get -u github.com/gorilla/mux
RUN go get -u google.golang.org/grpc

使用打包文件的方法如下

  1. 通过网盘获取我打包好的文件(文件的获取方法可以参考下面的“获取镜像中文件的方法”)放到dockerfile同目录。链接:https://pan.baidu.com/s/1elNtsQWRsAVJ3OqDkk4x3Q 提取码:1tyo
  2. 修改dockefile文件,将压缩文件解压到/go/src目录下。
FROM golang:alpine AS builder
ADD grpc.tar.gz /go/src

golang的grpc编译环境大功告成,接下来就执行正常的构建命令就好了。

扩展知识:获取镜像中文件的方法

使用该方法大家可以根据自己的需要定制打包的内容灵活使用。
以下方法基于docker-desktop 2.2.0.3(42716)环境。
有如下dockerfile

FROM golang:alpine AS builder
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories
RUN apk add git
RUN go get -u github.com/gorilla/mux
RUN go get -u google.golang.org/grpc

WORKDIR /uuid_service
COPY . .
RUN go build rpc_server.go

FROM alpine:latest AS production
WORKDIR /uuid_service
COPY --from=builder /uuid_service/rpc_server .

EXPOSE 13000
ENTRYPOINT ["./rpc_server"]

docker build成功后,获取镜像里所有下载的依赖包有两种方法。

  1. 观察docker build 的日志输出,
Sending build context to Docker daemon  117.2MB
Step 1/13 : FROM golang:alpine AS builder
 ---> e1fd9820be16
Step 2/13 : RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories
 ---> Using cache
 ---> 96f6c9af81cc
Step 3/13 : RUN apk add git
 ---> Using cache
 ---> ecb5b4b3c5dc
Step 4/13 : RUN go get -u github.com/gorilla/mux
 ---> Using cache
 ---> 4a90ac5181c9
Step 5/13 : RUN go get -u google.golang.org/grpc
 ---> Using cache
 ---> 27fe0d1ee559
Step 6/13 : WORKDIR /uuid_service
 ---> Using cache
 ---> c912b28f2ccc
Step 7/13 : COPY . .
 ---> c8d17282eea5
Step 8/13 : RUN go build rpc_server.go
 ---> Running in 697503c40565
Removing intermediate container 697503c40565
 ---> b1cd55c7d153
Step 9/13 : FROM alpine:latest AS production
 ---> e7d92cdc71fe
Step 10/13 : WORKDIR /uuid_service
 ---> Using cache
 ---> 998150fa0c67
Step 11/13 : COPY --from=builder /uuid_service/rpc_server .
 ---> Using cache
 ---> 1ebcc0aba1e9
Step 12/13 : EXPOSE 13000
 ---> Using cache
 ---> b5b870eaa1a7
Step 13/13 : ENTRYPOINT ["./rpc_server"]
 ---> Using cache
 ---> db5647ad1232
Successfully built db5647ad1232
Successfully tagged t:v1

docker build每执行一步都会生成一个镜像,找到需要的镜像id就可以了。这个输出的例子里面,我们需要的镜像是 27fe0d1ee559 。

  1. 使用docker images命令查看
d:\> docker images
REPOSITORY     TAG             IMAGE ID            CREATED             SIZE
uuid           v1              db5647ad1232        39 hours ago        18.4MB
<none>         <none>          360467d39956        39 hours ago        610MB

名字为<none>的镜像,就是dockfile使用多段构建时出现的中间产物,这个镜像就是dockerfile中builder阶段的的镜像。

接下来运行找到的镜像,把文件复制出来。
注意:下面的命令会将windows系统中的d:\files目录映射到容器中的/go/src目录,需要打开docker-desktop/settings/resources/file sharing设置,将需要映射的盘符勾选并确定。否则话会出现“Unhandled exception: Drive has not been shared”错误提示。

d:\> docker run -it -v d:\files:/files 360467d39956 /bin/sh
cd /go/src
tar czf grpc.tar.gz *
cp grpc.tar.gz /files
exit

这样就将容器中的文件打包放到d:\files目录下面了。


有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:cnwinds

查看原文:go get -u google.golang.org/grpc被墙的解决方法

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

2135 次点击  
加入收藏 微博
2 回复  |  直到 2020-03-02 09:40:41
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传