Home Docker的一些坑
Post
Cancel

Docker的一些坑

docker编译go的时候无法下载golang.org/x/crypto

这个问题着实有点操蛋,在本机上我是先mkdir $GOPATH/golang.org/x/crypto, 用github.com/golang/crypto的内容直接替换的 但是在容器的编译中我也尝试过这招,但是不仅麻烦而且最后还没成功,于是我发现了GO自带了PROXY, 所以用一个代理服务(go仓库代理并非网络代理)直接编译就行GOPROXY="https://goproxy.io" go build xxx

alpine版本的容器不带git(或其他软件)

为了缩减最终image的大小,我们可能会选择alpine版本的image,但是它基本上是最简安装,所以我们需要安装软件,以git为例 在国外服务器的情况下可以直接用apk add git安装git, apk是alpine自带的包管理软件 添加软件用的是add 但是在国内基本上连不上alpinelinux.org, 在dockerfile中添加RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories 替换成阿里云的镜像站,然后再安装git

go无法编译

在使用golang:1.12-alpine3.10时出现了这些问题

该镜像GOROOT=/usr/local/go GOPATH=/go

如果将源码文件夹传入$GOROOT/src/mycode 则会抛出类似/usr/local/go/src/giligili/server/router.go:8:2: non-standard import "github.com/gin-gonic/gin" in standard package "giligili/server" 的错误 说明GOROOT只能存放标准包,并且都不能导入非标准包

如果将源码文件夹传入$GOPATH/src/mycode

1
2
3
api/main.go:11:2: cannot find package "gopkg.in/go-playground/validator.v8" in any of:
        /usr/local/go/src/gopkg.in/go-playground/validator.v8 (from $GOROOT)
        /go/src/gopkg.in/go-playground/validator.v8 (from $GOPATH)

提示无法找到github的包…不知道为什么

最终解决方法 使用gomod,然后随便放在一个非$GOROOT $GOPATH的文件夹下编译即可

This post is licensed under CC BY 4.0 by the author.

Docker快速上手

gomod简介