在golang中导入存档/tar时docker运行失败
我试图让运行在cmd行的golang程序在docker容器中运行,但是导入archive/tar会导致错误 这项工作:在golang中导入存档/tar时docker运行失败,docker,go,Docker,Go,我试图让运行在cmd行的golang程序在docker容器中运行,但是导入archive/tar会导致错误 这项工作: package main import ( "fmt" ) func main() { fmt.Println("success!") } 产生产出: liam gotest $ docker run -it gotest success! liam gotest $
package main
import (
"fmt"
)
func main() {
fmt.Println("success!")
}
产生产出:
liam gotest $ docker run -it gotest
success!
liam gotest $ docker run -it gotest
standard_init_linux.go:207: exec user process caused "no such file or directory"
产生产出:
liam gotest $ docker run -it gotest
success!
liam gotest $ docker run -it gotest
standard_init_linux.go:207: exec user process caused "no such file or directory"
这是我的Dockerfile:
FROM scratch
WORKDIR /app
COPY . /app
CMD ["./test"]
我在跑步:
go version go1.11.4 linux/amd64
Docker version 18.09.1, build 4c52b90
ubuntu 18.04LTS
构建一个静态可执行文件,它就成功了。为什么?
这是因为默认的go-build
行为。由于动态链接,已编译的二进制文件仍在系统路径中查找库
由于scratch
为空,二进制文件无法找到系统库并抛出错误
如何解决这个问题?
修改生成脚本以生成包含所有内置库的静态编译生成
CGO\u ENABLED=0 GOOS=linux go build-a-installsuffix CGO-o main.
对docker容器使用上面构建的输出二进制文件