在Windows上与Docker联网

我使用这个官方指南在Windows 7机器上设置Docker:

https://docs.docker.com/windows/started/

我成功地从docker中心拉了一个图像,我可以运行我自己的docker图像。

不,我坚持试图运行和访问与Windows上的泊坞窗Web服务器。 显然,在boot2docker我无法按照习惯的方式到达我的docker集装箱。

docker run命令添加-p 3007:80 ,端口转发显示在容器列表( docker ps )中,为0.0.0.0:3007 -> 80 。 与-p 127.0.0.1:3007:80我得到一个更有意义的IP地址。 但是,我不能通过Windows主机上的浏览器访问容器。

此外, docker inspect不会显示正在运行的容器的IP地址(这似乎也是错误的)。

我也试过--net=host无济于事。

随着Docker Toolbox的推出,事情发生了一些变化。 现在你不直接与boot2docker交互,而是使用boot2docker docker-machine 。 虽然boot2docker仍然作为虚拟机存在,但不再有CLI-Tool。 它被Docker Machine取代。

因此,您应该能够通过键入以下命令来获得VM的IP地址: docker-machine ip <machine-name> 。 如果你有默认安装,你的机器名称将是default

docker-machine active您可以查看哪个VM当前处于活动状态。 用这个名字你也可以使用docker-machine inspect <machine-name>

您可以在官方文档中找到更多关于Docker Machine的信息。

事情发生了一些变化:Docker本身支持Windows,不再需要Boot2Docker或Docker Toolbox。 您现在应该从Windows 10 (或Windows server 2016)开始。

在整个Windows上的Docker旅程中,我开发了一个最佳实践,检查是否可以访问Web服务器:

  1. 运行你的容器(例如用你提到的docker run -d -p hostport:containerport imagename
  2. 壳进入容器​​(例如,与一个Windows容器: docker exec -it containerName powershelldocker exec -it containerName bash ,如果你使用Linux容器),并检查,如果iwr http://localhost:80 -UseBasicParsing给你一个好看HTML和HTTP状态200
  3. 如果2.没有问题(只有这样),检查您的容器的IP(例如与docker network inspect dockerNetworkName ,这将给你所有的容器数据,包括内部IP地址),并指向您的浏览器http://containerIP:containerPort
  4. 如果3.很好(再次:只有那么),检查是否可以通过http://localhost:containerPort访问您的Web服务器(这可能不适用于Windows容器,因为本地主机回送没有工作 – 虽然它可以在更新版本的Windows 10 / server 2016上工作)
  5. 最后一步(如果1.,2.和3.很好,4.可选),尝试从Windows主机外部查找您的网络服务器(例如,如果您在Virtual Box内部运行Windows主机,请注意端口转发配置! )