如何使用重定向127.0.0.1到docker机器IP

如何使用重定向127.0.0.1到docker机器IP,docker,docker-compose,docker-machine,Docker,Docker Compose,Docker Machine,我正在为响应通配符子域的web应用程序设置一个docker compose环境。在开发过程中,我们只需使用greatlvh.me域(解析为127.0.0.1),它适用于所有子域,无需任何额外配置,例如: 应用程序lvh.me:3000 附件2.lvh.me:3000 app watherever.lvh.me:3000 我的问题是如何设置自定义域(比如app.local)及其所有子域以解析到docker机器ip 注意:我不想使用etc/hosts,因为它需要将每个子域单独添加到文件中 您可以

我正在为响应通配符子域的web应用程序设置一个
docker compose
环境。在开发过程中,我们只需使用great
lvh.me
域(解析为127.0.0.1),它适用于所有子域,无需任何额外配置,例如:

  • 应用程序lvh.me:3000
  • 附件2.lvh.me:3000
  • app watherever.lvh.me:3000
我的问题是如何设置自定义域(比如
app.local
)及其所有子域以解析到
docker机器ip


注意:我不想使用
etc/hosts
,因为它需要将每个子域单独添加到文件中

您可以通过DNS托管服务使用您的一个域(或购买一个便宜的域)


如果您的docker机器的ip是动态的,您将需要一个支持动态DNS的托管服务,或者一个常规DNS服务,其中包含指向静态ip的a记录。

这实际上与docker没有特别的关系

请注意,使用“.local”域后缀执行此操作将阻止您从公共受信任的机构获取TLS证书,并将导致您必须修改环境以信任本地证书颁发机构,然后该机构将证书颁发给docker计算机的托管域。如果你有一个IT部门,我强烈建议你和他们谈谈;如果他们拒绝了你的请求,与你的经理谈谈,让他们推动

基本步骤如下:

  • 设置您可以将解析程序指向的本地DNS服务器

  • 将其配置为将其自身无法回答的查询转发到当前DNS服务器

  • 设置一个包含一些记录的“app.local”区域。(在SOA记录中,您的电子邮件地址应使用点而不是@符号,并使用尾随点。此处写入的所有DNS全名都必须有尾随点。此外,将“127.19.20.201”替换为您的docker机器IP):

  • 将OS解析器更改为指向该本地DNS服务器。(如果您在Windows上,此操作需要提升。否则,如果您使用的是bind,则位于/etc/resolv.conf中。)
  • 如果您需要在自己的机器上执行此操作,请与您的IT部门联系。他们有能力(尽管不一定愿意,除非你的经理强迫他们)为所有使用DNS服务器的机器设置此区域。业务理由(“我们需要它表现得像我们的主应用程序一样,但在不同的主机和域名上”)胜过意识形态上的正确性(尽管.local作为TLD保留在DNS RFC中),尽管它们不能胜过协议要求


    (如果您需要TLS证书进行此开发,您可能真的需要!——您还应该与您的IT部门联系。他们可以通过验证DNS区域的控制来从LetsEncrypt获得免费通配符证书。了解如何完成此操作可能需要15到30分钟,而设置环境可能需要15分钟到6小时(取决于使用中的DNS提供商。)

    您的DNS结构目前如何?您是否有一个全包条目重定向到docker机器ip?我假设您希望远程用户访问它(产品环境)。这是开发环境的设置。生产环境可以使用全包。
    app.local.    IN       SOA  60  yourmachinename your.email.address.  (
                           2019102100    ; serial number: YYYYMMDDss where ss is sequence
                           3600          ; refresh interval, not important here
                           1800          ; retry interval, not important here
                           3600          ; record expiration, not important here
                           60            ; minimum record time-to-live
    )
    app.local.    IN       A    60  172.19.20.201
    *.app.local.  IN       A    60  172.19.20.201