在Docker构建过程中设置DNS选项

42

由于本地网络配置的原因,我必须在我的Docker运行命令中添加--dns和--dns-search选项,就像这样:

docker run --dns XX.XX.1.1 --dns-search companydomain -t mycontainer

然而,Docker构建没有相同的选项。在构建期间是否有一种指定这些选项的方法?

你可以尝试在 Dockerfile 中的 /etc/resolv.conf 中添加额外的内容。 - lang2
更或少相同的问题:https://dev59.com/SGAf5IYBdhLWcg3w52Pm - Murmel
如果可能的话,我强烈建议使用docker build --add-host而不是纠结于DNS。大多数情况下,您想要访问一个私有注册表来构建一个Docker镜像,然后--add-host很可能就足够了。例如:docker build --add-host my-private-npm-registry.company.com:192.168.12.44 - richie
3个回答

25

基于Dockerfile的解决方案

您也可以在每个RUN命令级别上解决DNS查找问题:

RUN echo "nameserver XX.XX.1.1" > /etc/resolv.conf && \ 
    echo "search companydomain" >> /etc/resolv.conf && \    
    command_depending_on_dns_resolution

请记住:这只会更改此RUN命令的DNS解析行为,因为对/etc/resolv.conf的更改不是持久的(除了Docker核心工程师之一Brian Goff的评论外,我找不到任何官方参考文献)。


9
即使以root用户身份运行docker,仍然出现“permission denied”的错误? - ldgorman
你可能应该开一个新的问题来询问你的问题,因为对我来说这仍然有效(已经测试过v18.06.1-ce和API v1.38)。 - Murmel
这看起来像是我需要的解决方案,但我也看到了权限问题。 - Bill Yan
25
以前这个方法是可以使用的——我在公司网络上有很多内部Docker构建中都已经编程好了。但最新版的Docker似乎不再支持/etc/resolv.conf文件,因为它将该文件限制为只读状态。我回到这篇帖子,是要告诉那些在2021年之后看到这篇文章的人们。 - Cody
3
@Cody 是的,我遇到了这个错误:/bin/sh: 1: cannot create /etc/resolv.conf: Read-only file system。现在该怎么办? - Ali Waqas
由于只读错误不再有用,使用BMitch的解决方案。 - undefined

23

docker build使用运行在主机上的docker引擎的DNS设置。请参见我的回答,了解更新引擎DNS设置的步骤。


2

或者您也可以传递主机网络选项

docker build --network=host -t mycontainer:tag .

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接