“sudo systemctl enable docker”不可用:在WSL2引导时自动运行docker(使用“sysvinit”/“init”命令或解决方法)

“sudo systemctl enable docker”不可用:在WSL2引导时自动运行docker(使用“sysvinit”/“init”命令或解决方法),docker,service,systemd,wsl-2,systemctl,Docker,Service,Systemd,Wsl 2,Systemctl,我在WSL2上使用Ubuntu 根据,我可以在引导时使用 sudo systemctl enable docker 而不是在每次开机时用 sudo systemctl start docker 如果同时使用这两个命令,则无法在处连接到Docker守护程序unix:///var/run/docker.sock. docker守护进程正在运行吗 使用这两种方法中的任何一种,我都会 正在将docker.service的状态与SysV服务脚本同步 /lib/systemd/systemd sysv安

我在WSL2上使用Ubuntu

根据,我可以在引导时使用

sudo systemctl enable docker
而不是在每次开机时用

sudo systemctl start docker
如果同时使用这两个命令,则无法在处连接到Docker守护程序unix:///var/run/docker.sock. docker守护进程正在运行吗

使用这两种方法中的任何一种,我都会

正在将docker.service的状态与SysV服务脚本同步 /lib/systemd/systemd sysv安装。执行: /lib/systemd/systemd sysv安装启用docker

测试运行表明docker尚未运行:

docker:无法连接到位于的docker守护程序 unix:///var/run/docker.sock. docker守护进程正在运行吗?。看见 “docker运行-帮助”

在之前的一些步骤中,我在这一点上也得到了不同的信息:

系统尚未以systemd作为初始系统PID 1启动。不能 操作。无法连接到总线:主机已关闭

这让我想到:

原因:您的Linux系统没有使用systemd 如何知道您使用的是哪个init系统?您可以使用此命令 要知道与PID 1关联的进程名称,请选择 在您的系统上运行:

ps -p 1 -o comm=
它应该在输出中显示systemd、sysv或类似的内容

ps-p1-o comm=给了我初始化

根据这个和这个表

我可以选择service docker start来运行docker,这很有效。但我找不到像systemd的sudo systemctl enable docker for sysvinit这样的东西。我希望是这样的:

sudo service docker enable
但该启用对于sysvinit/init不可用

虽然sudo服务docker start的工作原理与sudo systemctl start docker类似,但没有使用enable的命令。目前,无论何时启动WSL2,我都需要运行sudo服务docker start

问题是:

使用sudo服务docker…到达sudo systemctl enable docker的命令是什么?如果不存在,在WSL2上打开Ubuntu时自动启动docker的解决方法是什么?

在WSL2上打开Ubuntu时自动启动docker的解决方法是什么

在用户启动脚本中运行必要的命令,例如.profile。首先检查服务是否正在运行,如:

sudo服务docker状态| | sudo服务docker启动

visudo或将规则添加到/etc/sudoers.d,以允许用户在不使用密码的情况下运行命令:

username ALL=root NOPASSWD:/usr/sbin/service docker*

更多详情: 正如您所发现的,WSL不包括任何systemd支持,也不真正包括对启动服务的任何直接支持

首先,WSL子系统不会在Windows启动时启动,而是仅在用户启动登录会话时启动。因此,如果没有任何真正的系统启动,init.d或systemd启动就没有那么大意义

此外,用户可能有多个WSL实例/发行版在运行,如果您像我一样这样做,那么您确实不希望所有实例的所有服务都在每次启动时运行

不过,对于Docker,您是在运行带有WSL2集成的Docker Desktop,还是直接安装到WSL2实例中?对于Docker Desktop,我昨天遇到了另一个问题,关于如何在Windows引导下启动Docker Desktop守护程序

您还可以在用户登录时通过Windows任务管理器启动WSL2实例,并在任务管理器中通过类似wsl sudo service docker start的方式运行脚本

请注意,在Windows启动时,这似乎不起作用,但是,只有登录,因为Windows似乎会在几秒钟后终止任何未绑定到活动用户的WSL实例,即使服务正在后台运行。您可以使用PowerShell调用WmiMethod解决此问题,类似于

powershell.exe调用WmiMethod-Class Win32_进程-Name Create-ArgumentList“wsl”,尽管我还没有对此进行彻底测试。

在WSL2上打开Ubuntu时自动启动docker的解决方法是什么

在用户启动脚本中运行必要的命令,例如.profile。首先检查服务是否正在运行,如:

sudo服务docker状态| | sudo服务docker启动

visudo或将规则添加到/etc/sudoers.d,以允许用户在不使用密码的情况下运行命令:

username ALL=root NOPASSWD:/usr/sbin/service docker*

更多详情: 正如您所发现的,WSL不包括任何systemd支持,也不真正包括对启动服务的任何直接支持

首先,WSL子系统不会在Windows启动时启动,而是仅在用户启动登录会话时启动。因此,如果没有任何真正的系统启动,init.d或systemd启动就没有那么大意义

此外,用户可能会运行多个WSL实例/分发,例如 如果您像我一样这样做,那么您真的不希望在每次启动时都运行来自所有实例的所有服务

不过,对于Docker,您是在运行带有WSL2集成的Docker Desktop,还是直接安装到WSL2实例中?对于Docker Desktop,我昨天遇到了另一个问题,关于如何在Windows引导下启动Docker Desktop守护程序

您还可以在用户登录时通过Windows任务管理器启动WSL2实例,并在任务管理器中通过类似wsl sudo service docker start的方式运行脚本

请注意,在Windows启动时,这似乎不起作用,但是,只有登录,因为Windows似乎会在几秒钟后终止任何未绑定到活动用户的WSL实例,即使服务正在后台运行。您可以使用PowerShell调用WmiMethod解决此问题,类似于

powershell.exe调用WmiMethod-Class Win32|u进程-Name Create-ArgumentList'wsl',尽管我还没有对此进行彻底测试。

为我在WSL2 Linux驱动器上将sudo service docker status | | sudo service docker start添加到我的~/.配置文件中起到了作用。之后,sudo docker跑hello world跑。您是对的,docker不是自动启动的,这似乎是合乎逻辑的,因为您并不总是需要它;。至于你的问题,我将Docker直接安装到WSL2实例中。为我将sudo service Docker status | | sudo service Docker start添加到我的WSL2 Linux驱动器上的~/.profile中,这对我很有用。之后,sudo docker跑hello world跑。您是对的,docker不是自动启动的,这似乎是合乎逻辑的,因为您并不总是需要它;。至于您的问题,我将Docker直接安装到WSL2实例中。
sudo service docker enable