在golang中导入存档/tar时docker运行失败

在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 $

我试图让运行在cmd行的golang程序在docker容器中运行,但是导入archive/tar会导致错误

这项工作:


    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容器使用上面构建的输出二进制文件