user:当前没有在linux / amd64上使用golang使用docker scratch实现

时间:2015-04-27 14:31:49

标签: go docker

我已经使用this教程来编译我的go应用程序以在从头开始派生的容器上运行。

我的go代码使用user.Current()中的os/user。当我使用博客文章中的技术时,运行容器时出现以下错误:

user: Current not implemented on linux/amd64

详细说明:

这是用于编译的命令:

CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o main .

这是用于创建图像的Dockerfile(基于scratch):

FROM scratch
ADD ca-certificates.crt /etc/ssl/certs/
ADD main /
ENTRYPOINT ["/main"]

这是用于运行容器的命令:

sudo docker run -it -v /var/run/docker.sock:/var/run/docker.sock --rm 813

有没有人遇到过这个?任何解决方案?

1 个答案:

答案 0 :(得分:4)

Linux上os/user软件包的用户信息查询是使用getpwuid_r系统调用实现的,因此在使用CGO_ENABLED=0进行编译时无效。

在Go中实现/etc/passwd解析器听起来很简单,getpwuid函数可以从不同的源检索用户信息。例如,在某些系统上,它可能使用LDAP目录。因此,获得奇偶校验的唯一方法是委托给C库。