Windows:如何在系统启动时启动 docker VM

Windows:如何在系统启动时启动 docker VM

我的情况是,我需要在基于 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 解决此问题的想法也都行得通。

答案1

前段时间我写了一个小型的 webapp,它有一个系统依赖项,只适用于 unix 系统,所以 docker 是自然的选择(虽然我使用 vagrant 也取得了相当大的成功...)

我正在使用 Windows 进行开发,并且也在它的 Docker 容器中运行这个 Web 应用程序。

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

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

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

第一个调用启动“默认”虚拟机,但您应该能够在那里指定不同的虚拟机。第二个调用运行“my/image”docker 容器,向主机系统公开端口 8080 并从我的用户主目录挂载“somepath”。请确保指定“-d”参数,因为它在“后台”运行容器(检查“docker run --help”)

之后,就可以通过“默认 VM”的 IP 地址访问我的 web 应用程序了(在我的情况下,该地址是 192.168.99.100,这可能与您的系统不同,您可以在首次启动此“docker quickstart terminal”时检查输出,因为 IP 地址将记录到控制台。)

这样我就能像往常一样使用浏览器了,将其指向“http://192.168.99.100:8080“并且可以与我的网络应用程序一起工作。

希望有帮助=)


编辑

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

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

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

  • 使用类似的服务包装器国家安全监测中心将批处理文件安装为 Windows 服务

答案2

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

答案3

我已经延长了查理·卡佛的回答。

使用以下脚本,您可以指定启动哪个 boot2docker 机器。由于 Docker Toolbox 文件夹可能不在您的路径中,并且可能未设置所有适当的环境变量,因此我编写了一些初始化说明。

将此脚本放入 bat 文件中,并使用 Charlie 引用的选项之一使其在启动时运行。

@echo off

REM Set the name of the VM configuration where dockerd will be hosted
set BOOT2DOCKER_VM=default

set PATH=%PATH%;"C:\Program Files\Docker Toolbox\"

REM Start the default machine (or any other machine)
docker-machine start %BOOT2DOCKER_VM%

REM Set the environment variables to use docker-machine and docker commands
@FOR /f "tokens=*" %i IN ('docker-machine env --shell cmd %BOOT2DOCKER_VM%') DO @%i

REM Start the image detached
docker run --detach --publish 5000:5000 foo-service

如果你关心的是,如果发生致命错误里面容器,请在 docker run 命令上使用 --restart 选项。

答案4

您还可以使用 NSSM(非吸吮服务管理器)

使用安装参数(nssm.exe install)从命令提示符或 powershell windows 启动 NSSM

这将启动 GUI,输入以下详细信息;

  • 路径:[Docker 安装目录]\Docker\resources\bin\docker-compose.exe
  • 启动目录:[docker 容器的路径]
  • 参数:docker 容器所需的任何参数(即 up)

最后在 GUI 底部的框中​​输入您的服务名称,然后您可以随意使用附加选项卡上的其他选项进行测试。

相关内容