我已经使用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
有没有人遇到过这个?任何解决方案?
答案 0 :(得分:4)
Linux上os/user
软件包的用户信息查询是使用getpwuid_r
系统调用实现的,因此在使用CGO_ENABLED=0
进行编译时无效。
在Go中实现/etc/passwd
解析器听起来很简单,getpwuid
函数可以从不同的源检索用户信息。例如,在某些系统上,它可能使用LDAP目录。因此,获得奇偶校验的唯一方法是委托给C库。