在
即使我搜索了"" golang""阿尔卑斯"严重错误:stdlib.h:没有这样的文件或目录",该信息也不会以日语显示,因此具有我的可搜索性。
1 2 3 4 5 6 7 8 | $ go test ./... Testing main package go: downloading ... ... # runtime/cgo exec: "gcc": executable file not found in $PATH FAIL github.com/KEINOS/Sample [build failed] FAIL github.com/KEINOS/Sample/hoge [build failed] |
-
图像:
golang:alpine - 转到:v1.15.3 linux / amd64
- 操作系统:Alpine Linux v3.12,x86_64(内核:4.19.76-linux kit)
TL; DR (今牧产业) sub> sub>
最低版本
1 2 | # Minimum, at-least-to-install packages to run/build apk add --no-cache gcc musl-dev |
卧式服装版(含以上)
1 2 | # Base meta-package to run/build (This includes the above packages as well) apk add --no-cache build-base |
在Alpine上进行开发吗?Build?如果遇到麻烦,请将其打包
1 2 | # For Dev, better to be installed packages apk add --no-cache alpine-sdk build-base |
TS; DR (我从中学到的东西) sub> sub>
我必须从一台运行的机器上的Go语言(Golang)源中编写。但是没有安装Golang。此外,不允许单独安装它。 .. ..
幸运的是,已经安装了Docker,所以我决定尝试使用
在将本地当前目录装载到容器的/ go目录中时开始
1 2 3 4 5 | $ # Docker でマウントを取ってみる $ cd /path/to/the/repo $ docker run --rm -it -v $(pwd):/go golang:alpine /bin/sh ... /go # |
$GOPATH/go.mod exists but should not 错误
首先,运行测试。不知何故,它根本无法工作。
1 2 3 4 5 6 7 8 9 10 11 | /go # go test main.go ./... $GOPATH/go.mod exists but should not /go # go mod download $GOPATH/go.mod exists but should not /go # go mod verify $GOPATH/go.mod exists but should not /go # go env $GOPATH/go.mod exists but should not |
我认为这是因为未安装
显然,以上错误与
-
参考
-
Go:Qiita从Dep迁移到Go Modules
-
当然,环境变量没有
1 2 3 4 5 6 7 8 9 | /go # env HOSTNAME=xxxxxxxxxxxx SHLVL=1 HOME=/root TERM=xterm PATH=/go/bin:/usr/local/go/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin GOPATH=/go PWD=/go GOLANG_VERSION=1.15.3 |
我想知道是否是因为它处于
以GO111MODULE = on开头
1 2 3 4 5 6 | $ docker run --rm -it -v $(pwd):/go -e GO111MODULE=on golang:alpine /bin/sh /go # /go # echo $GO111MODULE on /go # go env $GOPATH/go.mod exists but should not |
由于它是
GO v1.15,因此默认情况下首先将
-
参考
-
从GOPATH模式转到模块兼容模式@ Qiita
-
[Golang] $ GOPATH / go.mod存在,但不应避免@ Selfnote
-
在Ubuntu 16.04 @ StackOverflow中收到GOPATH错误"开始:无法在GOPATH模式下使用路径@version语法"
-
将源代码挂载到
将
go.mod exists but should not 的原因
原因是将源代码安装在容器上时的安装目标(
在
模块模式下,该模块将缓存在
暂时,我决定将其安装在
在将本地当前目录装载到/ app时开始
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | $ cd /path/to/the/repo $ docker run --rm -it -v $(pwd):/app golang:alpine /bin/sh /go # /go # # マウントしたディレクトリに移動 /go # cd /app /app # /app # # 今度は go env が表示された。GO111MODULEは空なので auto ∴ モジュールモード /app # go env GO111MODULE="" GOARCH="amd64" GOBIN="" GOCACHE="/root/.cache/go-build" GOENV="/root/.config/go/env" GOEXE="" GOFLAGS="" GOHOSTARCH="amd64" GOHOSTOS="linux" GOINSECURE="" GOMODCACHE="/go/pkg/mod" GONOPROXY="" GONOSUMDB="" GOOS="linux" GOPATH="/go" GOPRIVATE="" GOPROXY="https://proxy.golang.org,direct" GOROOT="/usr/local/go" GOSUMDB="sum.golang.org" GOTMPDIR="" GOTOOLDIR="/usr/local/go/pkg/tool/linux_amd64" GCCGO="gccgo" AR="ar" CC="gcc" CXX="g++" CGO_ENABLED="1" GOMOD="" CGO_CFLAGS="-g -O2" CGO_CPPFLAGS="" CGO_CXXFLAGS="-g -O2" CGO_FFLAGS="-g -O2" CGO_LDFLAGS="-g -O2" PKG_CONFIG="pkg-config" GOGCCFLAGS="-fPIC -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build030913204=/tmp/go-build -gno-record-gcc-switches" |
"gcc": executable file not found in $PATH 错误
然后,再次查看并重新测试。我继续前进,但是没有用。
运行测试
1 2 3 4 5 6 7 8 | /app # go test ./... go: downloading github.com/... go: downloading github.com/... ... # runtime/cgo exec: "gcc": executable file not found in $PATH FAIL github.com/KEINOS/Hello-Cobra [build failed] FAIL github.com/KEINOS/Hello-Cobra/hoge [build failed] |
不知何故
-
使用cgo(1)@ Qiita在C和Go链接后面
暂时安装
gcc安装
1 2 3 4 5 6 7 8 9 10 | /app # # gcc 入ってない /app # gcc --version /bin/sh: gcc: not found /app # /app # # gcc 入れる /app # apk add --no-cache gcc ... /app # # gcc 入った /app # gcc --version gcc (Alpine 9.3.0) 9.3.0 |
重新测试
1 2 3 4 5 6 7 8 | /app # go test ./... # runtime/cgo _cgo_export.c:3:10: fatal error: stdlib.h: No such file or directory 3 | #include <stdlib.h> | ^~~~~~~~~~ compilation terminated. FAIL github.com/KEINOS/Hello-Cobra [build failed] FAIL github.com/KEINOS/Hello-Cobra/hoge [build failed] |
毕竟,似乎他在某处使用
已将问题发布到GitHub上的Golang Docker存储库中。 Alpine的
尝试添加
不知道为什么
(从CGO看来在golang上不起作用:1.6-alpine#86 @ GitHub)
现在,让我们再次测试。有效。
1 2 3 4 5 6 7 8 | /app # # musl-dev 入れる /app # apk add --no-cache musl-dev ... /app # # テストする /app # go test ./... ok github.com/KEINOS/Sample 0.003s ok github.com/KEINOS/Sample/hoge 0.006s /app # # ?? |
是的,高山图像被设计为最小化。
(从CGO看来在golang上不起作用:1.6-alpine#86 @ GitHub)
"是的。Alpine图像被设计为最低要求。"该文件说。
需要注意的主要警告是,它确实使用
...
为了最小化映像大小,基于Alpine的映像中不包含其他相关工具(例如
(
"无论如何,我建议您Alpine使用不可读的
顺便说一句。由于Alpine是用于容器的,因此它不包含任何内容,因此我忘记了将自己需要的东西放在Dockerfile中来使用它。
他说:"以某种方式,找到并安装
构建所需的常见事物包
1 | apk add build-base |
开发所需的常见事物包
1 | apk add alpine-sdk |
-
#24 | docker-alpine | gliderlabs @ GitHub与build-essential等效吗?
当然,我可以不用插入
参考
-
从GOPATH模式转到模块兼容模式@ Qiita
-
使用cgo(1)@ Qiita在C和Go链接后面
-
[Golang] $ GOPATH / go.mod存在,但不应避免@ Selfnote
-
尝试构建docker映像时,出现" gcc":在$ PATH中未找到可执行文件@StackOverflow
-
CGO在golang上似乎不起作用:1.6-alpine#86 @ GitHub
-
#24 | docker-alpine | gliderlabs @ GitHub与build-essential等效吗?
-
在Ubuntu 16.04 @ StackOverflow中收到GOPATH错误"开始:无法在GOPATH模式下使用路径@version语法"