我在WSL2上使用Ubuntu(不是在Docker Desktop上)。
根据如何修复docker'Cannot connect to the Docker daemon at unix:///var/run/docker.sock.docker daemon正在运行吗?'在Ubuntu上,我可以在启动时使用
sudo systemctl enable docker
而不是每次开机时用
sudo systemctl start docker
这两个命令都避免了“无法连接到unix:///var/run/docker.sock.docker守护进程正在运行吗?".
当使用这两者中的任何一种时,我会
同步docker.service与SysV服务脚本的状态 /lib/systemd/systemd-sysv-install.执行: /lib/systemd/systemd-sysv-install启用docker
并且测试运行显示,该docker尚未运行:
docker run hello-world
docker:无法连接到unix:///var/run/docker.sock.docker守护进程正在运行吗?。请参阅“docker run--help”。
之前的一些步骤,此时我也收到了不同的消息:
系统尚未以systemd作为初始系统(PID 1)启动。无法操作。未能连接到总线:主机已关闭“
这让我修复了“系统未使用systemd作为init System启动”错误:
原因:您的Linux系统没有使用systemd如何知道您使用的是哪个init系统?您可以使用此命令了解与PID 1(系统上运行的第一个进程)相关联的进程名称:
ps -p 1 -o comm=
它应该在输出中显示systemd或sysv(或类似的东西)。
ps-p 1-o通信=给了我初始化。
根据这个和这个表
Systemd command
Sysvinit command
systemctl start service_name
service service_name start
systemctl stop service_name
service service_name stop
systemctl restart service_name
service service_name restart
systemctl status service_name
service service_name status
systemctl enable service_name
chkconfig service_name on
systemctl disable service_name
chkconfig service_name off
我可以选择service docker start
来运行docker,这是有效的。但是我找不到“sysvinit”的“systemd”的sudo systemctl启用docker
之类的东西。我希望它是这样的:
sudo service docker enable
但是该“启用”不适用于“sysvinit”/“init”。
虽然sudo service docker start
的工作方式类似于sudo systemctl start docker
,但没有使用“使能”的命令。目前,每当我启动WSL2时,我都需要运行sudo service docker start
。
问题是:
使用sudo服务docker到达sudo systemctl enable docker的命令是什么 ,或者如果不存在,在WSL2上打开Ubuntu时,这里有什么解决方法可以自动启动docker?
这适用于WSL ubuntu。
服务前——状态全部[-]ssh
服务ssh启动
服务--状态所有[]ssh
简短回答“在WSL2上打开Ubuntu时,自动启动docker的解决方法是什么?
>
选项1:在Windows 11上,向wsl中的“引导”部分添加必要的命令。形态:
[boot]
command="service docker start"
选项2:在Windows 10上,在用户启动脚本中运行必要的命令(例如. profile
)。通过检查查看服务是否首先运行,例如:
wsl.exe -u root -e sh -c "service docker status || service docker start"
这是一个比我之前的答案(选项3,下面)更好的选择,因为它不需要修改sudoers。这利用了wsl的优势。exe命令可以从WSL内部运行,使用-u root选项以root身份运行命令,无需密码。
注意:如果由于某种原因此命令失败,您的默认WSL发行版可能与您预期的不同。检查wsl.exe-l-v
的输出。您可以使用wsl.exe--setdefault更改默认发行版
选项3:(旧答案,在这里为子孙后代):
visudo
或向
/etc/sudoers添加规则。d要允许用户在没有密码的情况下运行命令,请执行以下操作:
username ALL = (root) NOPASSWD: /usr/sbin/service docker *
然后编辑您的<代码>。要添加的配置文件:
sudo service docker status || sudo service docker start
正如您所发现的,WSL不包括任何systemd支持,也不真正支持在引导时启动服务。
对于初学者来说,WSL子系统不会在Windows启动时启动,而是仅在用户启动登录会话时启动。因此,如果没有任何真正的“系统启动”,init. d或systemd启动就没有太大意义。
此外,用户可能有多个WSL实例/发行版正在运行,如果您正在这样做(就像我一样),那么您真的不希望所有实例的所有服务都在每次启动时运行(尽管更新后的答案是,Windows 11现在给了我们这个选项)。
不过,对于Docker来说,您是在运行具有WSL2集成的Docker Desktop,还是直接安装到WSL2实例中?对于Docker Desktop,我昨天在另一个问题中遇到了这个问题,关于如何在Windows引导下启动Docker Desktop守护进程。
您还可以在用户登录时通过Windows任务管理器启动WSL2实例,并通过任务管理器中的类似wsl-u根服务docker start的内容运行脚本。
但是请注意,这在Windows启动时似乎不起作用(仅登录),因为Windows似乎会在几秒钟后终止任何未绑定到活动用户的WSL实例(即使服务在后台运行)。您可以使用PowerShell
Invoke-Wmimethod
解决此问题,例如...
powershell。exe Invoke WmiMethod-Class Win32\u Process-Name Create-ArgumentList“wsl”
,尽管我还没有彻底测试过这一切。
问题内容: 我想在Ubuntu启动时运行一个命令(在任何人登录之前): 我该怎么做? 问题答案: 您可以在启动结束时执行的脚本中添加命令。 在之前编写命令。之后写的任何内容都将永远不会执行。
问题内容: 我有一种情况,我需要运行 一个 从窗户经常Linux shell命令(用不同的文件名)。我正在使用PuTTY和WinSCP来执行此操作(需要登录名和密码)。该文件通过WinSCP复制到linux机器中的预定义文件夹,然后从PuTTY运行命令。有没有一种方法可以使我通过程序自动执行此操作。理想情况下,我想从Windows右键单击该文件,然后发出命令,该命令会将文件复制到远程计算机,并以文
问题内容: 我准备了一个docker-compose文件来部署带有数据库的容器: 没关系。但是现在我需要创建一个数据库并建立其结构。我需要执行一些sql命令。为了检查我是否能够做到这一点,我将其添加到服务中: 但是我遇到以下错误: 我感觉命令是在Sql Server实例启动之前执行的。我该如何解决?Sql Server启动后如何执行一些sql? 问题答案: 问题是在容器中仅执行一个命令。当您在其中
问题内容: 我想知道是否有一种方法可以像使用bash的.bash_profile或.profile脚本那样在进入python shell时自动运行命令。我想自动导入一些模块,这样我每次跳入shell时都不必键入整个shebang。 谢谢, 问题答案: 是的,你可以使用环境变量来做到这一点所概述这里
首发动物园管理员 动物园管理员起床了 开始Kafka 运行Kafka的解决方案是什么?