在Windows中使docker计算机在主机名下可用

在Windows中使docker计算机在主机名下可用,docker,virtualbox,docker-machine,docker-for-windows,Docker,Virtualbox,Docker Machine,Docker For Windows,我正在尝试通过主机名使docker计算机可用于我的Windows。在像这样创建之后 docker-machine create -d virtualbox mymachine 设置一个docker容器来公开端口80,我如何给docker机器一个主机名,这样我就可以在浏览器中输入“”来加载网站?当我将“mymachine”更改为实际的IP地址时,它就会工作 这有一个解决方案,但我希望在hosts文件中没有条目的情况下实现它。这可能吗?如果目标是让多个开发人员尽可能简单,那么,localhost将

我正在尝试通过主机名使docker计算机可用于我的Windows。在像这样创建之后

docker-machine create -d virtualbox mymachine
设置一个docker容器来公开端口80,我如何给docker机器一个主机名,这样我就可以在浏览器中输入“”来加载网站?当我将“mymachine”更改为实际的IP地址时,它就会工作


这有一个解决方案,但我希望在
hosts
文件中没有条目的情况下实现它。这可能吗?

如果目标是让多个开发人员尽可能简单,那么,
localhost
将是您的最佳选择。只要您要公开和发布的端口在主机上可用,您就可以在浏览器中使用。如果它不是
80/443
,只需像这样附加它即可

如果您确实不想使用
/etc/hosts
localhost
路由,您也可以购买一个域并将其路由到
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

或者,如果您不想购买自己的域,并且所有开发人员都在同一网络上,并且您能够控制DHCP/DNS,那么您可以设置自己的DNS服务器,以包含返回
127.0.0.1
的专用路由。与公共DNS选项的概念类似,但有点脆弱,因为您可能允许您的开发人员在受控网络之外远程工作

按主机名连接需要通过主机名到IP的解析。这由hosts文件处理,并返回到DNS。这一切都发生在您接触docker容器之前,docker机器本身没有任何外部钩子来配置您的主机文件或DNS服务器

使用windows上较新版本的Docker,您可以运行带有HyperV和networking的容器,并自动将端口映射到本地主机,以便您可以连接到。这不适用于docker机器,因为它在没有本地主机映射的情况下运行virtualbox VM

如果你不想配置你的主机文件DNS,并且不能使用更新版本的docker,你只能通过IP连接。您可以使用免费的通配符DNS服务,将您想要的任何名称以及IP地址映射回同一IP地址。这使您可以使用类似基于主机名的反向代理来连接同一端口后面docker内部的多个容器

最后一个选项是使用静态IP运行docker主机VM,因此,您可以依靠运气在给定范围内保持相同的IP,也可以使用另一个工具(如Vagrant)在笔记本电脑上使用静态IP启动docker主机VM。拥有静态IP后,您可以修改主机文件一次,为每个开发人员创建DNS条目,或使用相同的xip.io URL每次访问容器。

  • 您可以在您的中添加域名条目:

  • 如果你的应用程序可以从你工作场所的同事那里访问,并且你的windows机器可以作为服务器使用,那么你也可以在你的本地网络上设置DNS服务器

    不过,这需要使您的VM可以从本地网络访问,但如果您的应用程序是windows主机上运行的唯一Web服务,那么这可能是一个简单的解决方案。(请注意,您也可以设置一个linux服务器,以避免在windows上使用docker机器,但您仍然必须为此服务器设置一个静态IP,以确保您的域名解析工作正常)

  • 您也可以购买自己的域名(或免费获得一个),如果您没有在主机文件中写入的权限,可以将其分配给docker机器的IP

但是,如果应用程序主机并没有IP地址,并且您的docker机器IP发生变化,这些解决方案可能在一段时间后不再有效。不设置静态IP并不意味着它会自动更改,但是,如果不擦除机器以创建新的IP,应该会有一些持久性,但这也不能保证


还请注意,如果您设置了DNS服务器,那么您必须将其托管在具有静态IP的设备上。然后,您的同事必须配置他们的机器以使用此机器。

您可能需要参考docker文档:

您可以使用Dockerfile或 --向docker运行公开标志。公开端口是记录使用了哪些端口的一种方式,但实际上并不映射或打开任何端口。 公开端口是可选的

您可以使用--publish或--publish all标志向docker发布端口 跑这会告诉Docker要在容器网络上打开哪些端口 接口。发布端口时,它将映射到可用端口 主机上的高阶端口(高于30000),除非 指定运行时主机上要映射到的端口。你不能 在生成时,在主机上指定要映射到的端口 图像(在Dockerfile中),因为无法保证 该端口将在运行 形象

我还建议查看-p标志,因为它与-p标志不同

此外,我建议您尝试Windows或Mac的“Kitematic”。它更简单(但不要忘记在任何更改后提交!)

现在关于你公司的网络,它与docker无关,只要你在计算机上本地使用docker,你公司设置的配置就无关紧要了。即使您不必更改任何VM网络配置以向本地主机公开内容,如果您使用的是Vbox(适配器1==>NAT&adapter 2==>host only),所有这些都是默认设置

希望这就是你想要的

我建议。这是我一直在用的东西。当您运行的不同容器都应该响应同一端口(例如,多个web服务)时,它特别方便

nginx代理与您分开运行
X.X.X.X  mymachine # Replace X.X.X.X by the IP of your docker machine
version: '2'
services:
    avahi:
        image: 'enernoclabs/avahi:latest'
        network_mode: 'host'