在Windows中使主机名下的docker机器可用

我正在尝试通过主机名使我的Windows可用的docker计算机。 创build后就像

docker-machine create -d virtualbox mymachine 

并设置一个公开端口80的docker容器,我怎么能给这个docker机一个主机名,这样我就可以在浏览器中input“ http:// mymachine / ”来加载这个网站? 当我将“mymachine”更改为实际的IP地址时,它就起作用了。

有一个这个问题的答案 ,但我想实现它没有在hosts文件中的条目。 那可能吗?

您可能想要参考docker文档: https : //docs.docker.com/engine/userguide/networking/#exposing-and-publishing-ports

您使用Dockerfile中的EXPOSE关键字或docker run中的–expose标志公开端口。 公开端口是一种logging使用哪个端口的方法,但并不实际映射或打开任何端口。 公开端口是可选的。

使用–publish或–publish-all标志将端口发布到docker run。 这告诉Docker在容器的networking接口上打开哪些端口。 端口发布时,除非在运行时指定要在主机上映射的端口,否则它将映射到主机上的可用高端端口(高于30000)。 由于无法保证在运行映像的主机上可用端口,所以在生成映像时(在Dockerfile中),您不能指定映射到主机上的端口。

我也build议检查-P标志,因为它与-p不同。

另外我build议你尝试Windows或Mac的“Kitematic”, https: //kitematic.com/。 这很简单(但不要忘记在做任何修改之后再提交)

现在关于你公司的networking,它与docker无关,只要你在你的计算机上使用本地docker,不pipe你的公司设置了什么configuration。 即使你不需要改变任何虚拟机networkingconfiguration为了暴露你的本地主机,所有默认情况下,如果你使用的Vbox(适配器1 ==>> NAT和适配器2 ==>主机)

希望这是你在找什么

如果目标是让多个开发人员尽可能简单, localhost将是您最好的select。 只要您公开和发布的端口在主机上可用,您就可以在浏览器中使用http:// localhost 。 如果是80/443以外的端口,只需将其附加为http:// localhost:8080即可 。

如果你真的不想去/etc/hostslocalhost路由,你也可以购买一个域名并且路由到127.0.0.1 。 这篇文章更详细地阐述了细节。

例:

 dave-mbp:~ dave$ traceroute yoogle.com traceroute to yoogle.com (127.0.0.1), 64 hops max, 52 byte packets 1 localhost (127.0.0.1) 0.742 ms 0.056 ms 0.046 ms 

或者,如果您不想购买自己的域名,并且所有的开发人员都在同一个networking上,并且您可以控制DHCP / DNS,则可以设置您自己的DNS服务器,将私有路由包括回127.0.0.1 。 与公共DNS选项类似的概念,但更脆弱,因为您可能会允许您的开发人员远程工作,在受控networking之外。

按主机名连接要求您通过主机名到IPparsing。 这是由主机文件处理,并退回到DNS。 这一切都发生在你触摸Docker容器之前,Docker机器本身没有任何外部钩子去configuration你的主机文件或DNS服务器。

随着更新版本的Windows上的Docker,你运行容器与HyperV和networking自动映射端口本地主机,所以你可以连接到http://本地主机 。 这对docker-machine不起作用,因为它在没有本地主机映射的情况下轮换virtualbox虚拟机。

如果你不想configuration你的主机文件,DNS,并且不能使用更新版本的docker,那么你只能通过IP连接。 你可以做的是使用免费的通配符DNS服务,如http://xip.io/ ,将你想要的任何名字以及你的IP地址映射回同一个IP地址。 这使您可以使用诸如基于主机名的反向代理之类的东西连接到同一端口后面的泊坞窗内的多个容器。

最后一个选项是使用静态IP运行您的docker主机VM。 Docker-machine现在还不能直接支持这个function ,所以你可以依靠运气来保持给定范围内的IP不变,或者使用另一个工具,如Vagrant,通过笔记本电脑上的静态IP来启动Docker主机虚拟机。 获得静态IP后,您可以修改主机文件一次,为每个开发者创build一个DNS条目,或者使用相同的xip.io URL来访问这些容器。

  • 您可以在hosts file添加一个域名条目:

     XXXX mymachine # Replace XXXX by the IP of your docker machine 
  • 你也可以在你的本地networking上build立一个DNS服务器,如果你的应用程序可以从你的工作场所的同事那里得到,并且你的Windows机器是保持服务器的。

    这将需要让你的虚拟机从本地networking访问,但如果你的应用程序是Windows主机上运行的唯一的Web服务端口转发可以是一个简单的解决scheme。 (注意,你可以设置一个linux服务器来避免在windows上使用docker-machine,但是你仍然需要为这个服务器设置一个静态IP来确保你的域名parsing工作)。

  • 你也可以购买你自己的域名(或者免费获得一个域名),如果你没有权限在你的hosts文件中写入,可以为它分配你的docker-machine的IP。

但是,如果应用程序主机没有静态IP ,并且您的docker-machine IP发生更改,那么这些解决scheme可能无法工作了。 不设置静态IP并不意味着它会自动更改,但如果不擦除机器以创build新的机器,应该有一些持久性,但这也不能保证。

另外请注意,如果您设置了DNS服务器,则您必须将其托pipe在具有静态IP的设备上。 那么你的同事就必须configuration他们的机器来使用这个机器。

我build议nginx-proxy 。 这是我一直使用的。 当你运行不同的容器时,它们都应该适用于同一个端口(例如多个Web服务)。

nginx-proxy独立地从你的服务中运行,并监听docker-events来更新它自己的configuration。 在您启动服务并查询nginx-proxy正在监听的端口后,您将被redirect到您的服务。 因此,您需要使用DEFAULT_HOST标志启动nginx-proxy,或者将所需的主机作为头部参数与请求一起发送。

因为我只用普通的docker运行这个,但是我不知道它是否可以和docker-machine一起工作。