k8s部署golang项目之获取项目依赖问题:
docker build golang项目的时候,需要获取go程序的依赖,可能会有如下的问题:
[root@k8smaster k8s-hello]# docker build -t chetaixian/hello-wolrd:v1.0.3 .
...
...
Step 5/6 : RUN go build -o main .
---> Running in 9ac63e6c09eb
go: downloading github.com/spf13/viper v1.13.0
cmd/config.go:5:2: github.com/spf13/viper@v1.13.0: Get "https://proxy.golang.org/github.com/spf13/viper/@v/v1.13.0.zip": dial tcp 142.251.42.241:443: i/o timeout
The command '/bin/sh -c go build -o main .' returned a non-zero code: 1
在这里如果Dockerfile里面没有配置 go proxy,那么就会从国外站点拉取go项目依赖,一般是拉取不成功的,为了解决这个问题,可以加上 go proxy:
FROM golang:alpine
RUN mkdir /hello-world
COPY . /hello-world
WORKDIR /hello-world
#设置代理
RUN GOPROXY="https://goproxy.cn" GO111MODULE=on go build -o main .
#RUN go build -o main .
CMD ["/hello-world/main", "--config", "/etc/app/config.yaml"]
这样基本就不会有问题
//有时候需要引入私有仓库,通过下面的命令
go env -w GOPRIVATE=gitee.com
//假如这个私有仓库是http的,而非https,需要加入insecure里
go env -w GOINSECURE=go.qinhongzs.com
//由于配置了私有仓库,那么在 go mod tidy 或者 go get 的时候 需要登录 输入用户名和密码,这个在自动发布项目就会有问题,解决办法就是在 ~/.netrc 文件里记录私
有仓库的登录信息,如下就是记录了 gitee下的账号信息,如果执行 git pull 就不用再输入账号密码信息;go mod tidy 或者 go get 实际上也是调用 git 命令拉取相关的
依赖,也就不用再输入账号密码信息了,这个在做 k8s 的项目自动发布的时候很有用,后面得分项目我会用大
[root@k8smaster ~]# vim ~/.netrc
machine gitee.com
login xxxxx@qq.com
password xxxyyyx=zzz
如果有多个 server 就重复上面的三行, 分别输入对应的服务器、 用户名和密码即可.
也可以把这三行写在同一行:machine gitee.com login xxxxx@qq.com password xxxyyyx=zzz
