设置主机->;来自DOCKER容器内部的IP映射

设置主机->;来自DOCKER容器内部的IP映射,docker,networking,dns,containers,hosts,Docker,Networking,Dns,Containers,Hosts,我想在docker容器中为我的应用程序中的特定域名设置一个类似主机文件的条目。与中一样,我希望容器中的应用程序能够自动解析x.com:192.168.1.3,而无需任何外部输入或配置。我意识到与规范的docker用例相比,这是非常规的,所以不要@me:) 我希望我的代码在某个分支上为特定域使用不同的主机名:ip映射。我希望它能够自动执行,而不需要主机、docker守护进程或执行容器的最终用户的干预。理想情况下,这种映射将发生在容器基础设施级别,而不是对应用程序代码进行某种修改,而应用程序代码本身

我想在docker容器中为我的应用程序中的特定域名设置一个类似主机文件的条目。与中一样,我希望容器中的应用程序能够自动解析
x.com:192.168.1.3
,而无需任何外部输入或配置。我意识到与规范的docker用例相比,这是非常规的,所以不要@me:)

我希望我的代码在某个分支上为特定域使用不同的主机名:ip映射。我希望它能够自动执行,而不需要主机、docker守护进程或执行容器的最终用户的干预。理想情况下,这种映射将发生在容器基础设施级别,而不是对应用程序代码进行某种修改,而应用程序代码本身将执行这种映射

我应该怎么做

为什么这么难?

  • docker容器中的
    /etc/hosts
    文件是只读的,不能从容器内部修改。这是经过设计的,由docker守护进程管理

  • docker容器的DNS以多种方式链接到底层主机的DNS,过多地使用它是不明智的

要求

  • 在容器内部,域
    x.com
    解析为非标准的预配置IP地址
  • 该容器是在不确定配置的主机上运行的标准Docker容器
约束条件:

  • 我无法将配置作为运行时标志传递(例如,
    --add host
  • 我无法从外部公开映射(例如,在主机上设置DNS条目)
  • 我不能修改底层主机,也不能指望它以某种方式进行配置
开放性问题: 是否可以从容器内部设置DNS条目并仅覆盖容器的主机DNS?如果是这样的话,有什么好的轻量低管理工具(例如
DNSmasq
coredns


有什么魔法可以让我模拟
/etc/hosts
文件,或者在解析链的前面添加一个预处理文件吗?

编辑
/etc/resolv.conf
在本地主机上使用DNS服务器,并使该DNS代理成为原始DNS,除了一个映射之外?嗯,因此,我无法以任何方式控制底层主机。理想情况下,我希望这对消费者是完全透明的。您不需要它,您需要在容器内运行DNS服务器,并在容器内编辑
/etc/resolv.conf
。您对何时/以何种方式编辑
resolv.conf
有何建议,假设它是在容器运行时从主机复制的,并且可以由docker AFIK任意管理?例如,我在使用
sed-I
编辑hosts文件时遇到问题,我希望避免这种情况。我想我可以在我的程序中运行一个例程,定期检查resolveconf(比如crond)并修改它;或者在进行网络呼叫之前修改它。