Windows:如何启动 docker VM at 系统启动

tir*_*hen 8 windows windows-service teamcity build-server docker

我需要在基于 Windows 的构建服务器上运行 docker(我通常使用 Arch/Debian Linux),但我找不到让 docker VM 在系统启动时自动启动的方法。在 Linux 上这将是一项服务,但在 Windows 上似乎并非如此。

我按照https://docs.docker.com/engine/installation/windows/上的说明操作,当我使用 $ docker-machine create 启动 docker VM 时,一切都会运行,但如何将其作为 Windows 服务或类似服务?

目标是能够使用构建 Docker 镜像,作为容器启动并针对它们运行 e2e 测试。由于我们正在使用 TeamCity 来构建有关使用 TeamCity 解决此问题的任何想法,我猜也可以。

sal*_*ine 7

前段时间我写了一个小的 webapp,它有一个系统依赖,它只适用于 unix 系统,所以 docker 是自然的选择(尽管我在 vagrant 上取得了一些成功..)

我正在使用 windows 进行开发,并在其 docker 容器中运行此 webapp。

所以我遇到了同样的问题,“如何在系统启动时启动它”?

我最终在我的自动启动目录中生成了一个小批处理文件,其中包含类似以下几行的内容:

docker-machine start default
docker run -d -p 8080:8080 -v //c/Users/%USERNAME%/somepath:/c/Users/%USERNAME%/somepath my/image --some.webapp.param=some-webapp-param-value
Run Code Online (Sandbox Code Playgroud)

第一次调用启动“默认”虚拟机,尽管您应该能够在那里指定不同的虚拟机。第二个调用运行“my/image”docker 容器,将端口 8080 暴露给主机系统并从我的用户主目录安装“somepath”。确保在“后台”运行容器时指定“-d”参数(检查“docker run --help”)

之后,我的 webapp 可以通过“默认 VM”的 ip 地址访问(在我的例子中是 192.168.99.100,这可能在你的系统上有所不同,你可以在第一次启动这个“docker quickstart terminal”时检查输出作为ip 地址将被记录到控制台。)

这样我就可以像往常一样使用我的浏览器,将它指向“ http://192.168.99.100:8080 ”并且可以使用我的网络应用程序。

希望有帮助=)


编辑

现在有了上述批处理文件,有 3 个选项:

  • 将批处理文件放在您的自动启动目录中(需要交互式用户会话,因此可能不适合服务器实例..)

  • 通过 Windows 的任务调度程序调度批处理文件的执行。在那里您可以将“在计算机启动时运行”设置为任务的触发器。无论交互式会话(登录用户..)是否可用,任务都会运行

  • 使用像NSSM这样的服务包装器将批处理文件安装为 Windows 服务


小智 5

只是一个小插件:当您启动 docker 镜像并希望它们在 docker 启动时启动(在这种情况下是运行 docker 的虚拟机),您可以在 docker run 命令中使用 --restart always 选项。然后您可以从批处理文件中删除 docker run 命令。虚拟机启动后,容器应自动启动。