使用scratch docker容器时,会收到此错误消息"&引用;无法解组DNS消息";

使用scratch docker容器时,会收到此错误消息"&引用;无法解组DNS消息";,docker,go,dns,Docker,Go,Dns,我正在尝试从我的go代码在本地运行scratch docker容器。Dockerfile如下所示: FROM golang:1.11.4 as builder WORKDIR /app ADD . . RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 GOARM=7 make FROM scratch COPY --from=builder /app/myprogram . 在我的代码中,我尝试使用以下urlmongodb连接到mongodb+sr

我正在尝试从我的go代码在本地运行scratch docker容器。Dockerfile如下所示:

FROM golang:1.11.4 as builder


WORKDIR /app

ADD . .

RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64  GOARM=7 make

FROM scratch
COPY --from=builder /app/myprogram .
在我的代码中,我尝试使用以下url
mongodb连接到mongodb+srv://myusername:mypassword@my-staging-vki7g.gcp.mongodb.net

我可以在本地的mongoshell上很好地连接到这个mongodb。 但是,当我运行scracth容器时,我得到以下错误

error parsing uri (mongodb+srv://myusername:mypassword@my-staging-vki7g.gcp.mongodb.net): lookup provendb-staging-vki7g.gcp.mongodb.net on 192.168.65.1:53: cannot unmarshal DNS message

是否需要添加任何依赖项?

我认为您遗漏了一些构建标志。也不确定为什么要编译为docker容器的arm

我写了一篇关于建立码头工人形象的博文,就像你在这里做的那样。这可能会帮助您解决问题


从头开始意味着没有操作系统。通常,它用于配置基本操作系统,您将在其中实际添加必要的依赖项和应用程序二进制文件。是的,是否有任何明确的依赖项需要从
非scratch
复制到
scratch
?如果使用scratch,则必须复制所有与操作系统相关的二进制文件。以阿尔卑斯山图像是如何构建的为例:您希望使用scratch作为基础图像的具体原因是什么?依我看,你应该用:阿尔卑斯山而不是scratch@fly2matrix我不同意。Go in the Cloud的一大优点是,如何将二进制文件添加到一个非常小、安全的容器中,而不存在操作系统可能带来的任何漏洞。因此,只要有可能,我认为Go二进制文件应该从头开始使用
。也就是说,恐怕我不知道如何回答你的问题@user3288346!谢谢@Lain,我会在GoLang上试用后进行验证并给出回复。