设置主机->;来自DOCKER容器内部的IP映射
我想在docker容器中为我的应用程序中的特定域名设置一个类似主机文件的条目。与中一样,我希望容器中的应用程序能够自动解析设置主机->;来自DOCKER容器内部的IP映射,docker,networking,dns,containers,hosts,Docker,Networking,Dns,Containers,Hosts,我想在docker容器中为我的应用程序中的特定域名设置一个类似主机文件的条目。与中一样,我希望容器中的应用程序能够自动解析x.com:192.168.1.3,而无需任何外部输入或配置。我意识到与规范的docker用例相比,这是非常规的,所以不要@me:) 我希望我的代码在某个分支上为特定域使用不同的主机名:ip映射。我希望它能够自动执行,而不需要主机、docker守护进程或执行容器的最终用户的干预。理想情况下,这种映射将发生在容器基础设施级别,而不是对应用程序代码进行某种修改,而应用程序代码本身
x.com:192.168.1.3
,而无需任何外部输入或配置。我意识到与规范的docker用例相比,这是非常规的,所以不要@me:)
我希望我的代码在某个分支上为特定域使用不同的主机名:ip映射。我希望它能够自动执行,而不需要主机、docker守护进程或执行容器的最终用户的干预。理想情况下,这种映射将发生在容器基础设施级别,而不是对应用程序代码进行某种修改,而应用程序代码本身将执行这种映射
我应该怎么做
为什么这么难?
- docker容器中的
文件是只读的,不能从容器内部修改。这是经过设计的,由docker守护进程管理/etc/hosts
- docker容器的DNS以多种方式链接到底层主机的DNS,过多地使用它是不明智的
- 在容器内部,域
解析为非标准的预配置IP地址x.com
- 该容器是在不确定配置的主机上运行的标准Docker容器
- 我无法将配置作为运行时标志传递(例如,
)--add host
- 我无法从外部公开映射(例如,在主机上设置DNS条目)
- 我不能修改底层主机,也不能指望它以某种方式进行配置
DNSmasq
,coredns
)
有什么魔法可以让我模拟
/etc/hosts
文件,或者在解析链的前面添加一个预处理文件吗?编辑/etc/resolv.conf
在本地主机上使用DNS服务器,并使该DNS代理成为原始DNS,除了一个映射之外?嗯,因此,我无法以任何方式控制底层主机。理想情况下,我希望这对消费者是完全透明的。您不需要它,您需要在容器内运行DNS服务器,并在容器内编辑/etc/resolv.conf
。您对何时/以何种方式编辑resolv.conf
有何建议,假设它是在容器运行时从主机复制的,并且可以由docker AFIK任意管理?例如,我在使用sed-I
编辑hosts文件时遇到问题,我希望避免这种情况。我想我可以在我的程序中运行一个例程,定期检查resolveconf(比如crond)并修改它;或者在进行网络呼叫之前修改它。