前言:
此前,微软发布的wsl不支持运行docker,启动服务时会报错“Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?”虽然当时网上有一些解决办法,但都需要搭配Docker for Windows运行。我认为这样的话为何不直接使用Docker for Windows,所以这并不是一个令人满意的解决方案。
Win10创意者更新后,在WSL中原生运行Docker Engine成为可能,不再需要安装多余的Docker for Windows,这显然是一个令人振奋的消息。新发布的wsl2也可以使用docker,不过wsl2使用的是Hyper-V虚拟化技术,带来真正内核的同时也带来了一些不便。例如wsl2不再跟宿主机共用同一个ip地址,而且启用wsl2后其他虚拟化工具无法使用(Wmware和Virtual Box),好在微软正在尝试解决这些问题。不过目前为止wsl1在使用上仍然占据一席之地。
虽然现在的wsl1可以成功运行docker,但并不会跟随windows系统启动,每次开机都需要手动开启,十分麻烦。本教程旨在以最简便的方式实现docker服务跟随系统自动启动。
前提条件:在本机的WSL中已成功安装和运行docker。
安装docker:https://www.lance.moe/post-330.html
开启ssh服务(可选):https://www.jianshu.com/p/cd4d604e0b44
PS:若开启ssh服务请修改默认端口以免跟windows系统冲突。
由于脚本需要以管理员身份运行,所以本教程使用任务计划而不是直接将脚本拖到启动文件夹。
正式开始:
1、首先在任意目录下新建一个vbs脚本,里面定义了要启动的服务,内容为:
set ws=wscript.createobject("wscript.shell")
ws.run "wsl -d ubuntu -u root /etc/init.d/ssh start",vbhide
ws.run "wsl -d ubuntu -u root /etc/init.d/cgroupfs-mount start",vbhide
ws.run "wsl -d ubuntu -u root /etc/init.d/docker start",vbhide
2、然后打开“任务计划程序”,在控制面板→管理工具→任务计划程序。
或者直接按下win+s搜索程序名称(推荐)。
3、创建一个任务:
3.1、在任务里设置新建一个触发器,规则为在系统启动时触发。
3.2、然后新建一个操作,里面填入脚本的路径。
3.3、在条件里关闭电源选项。
3.4、在常规中给当前任务命名、勾选“不管用户是否登录都要运行”和“使用最高权限运行”。
3.5、确定并保存,这样在下次系统启动时,脚本就会被自动运行。
需要注意的是,若要让容器跟随docker服务启动,请在创建容器时添加--restart=always 或 --restart=on-failure 参数,已创建的容器可以使用 docker update 修改参数。