赞
踩
https://blog.csdn.net/qq_42362605/article/details/124898062 这个教程好
WSL的全称是Windows Subsystem for Linux(适用于Linux的Windows子系统)。
平时开发大部人都是在提供了高效GUI的window下工作,但是真正部署环境普遍都是在Linux中,所以为了让开发环境和部署环境统一,我们需要在windows模拟LInux环境,以前我们可能通过虚拟机的方式实现,不过自从微软拥抱开源更加开发提供了Linux的Windows子系统(WSL)后,我们又多了一个选择,通过WSL运行linux程序(WSL比通过虚拟机来运行linux性能更强,耗费资源更小,安装linux环境最大只需要200多M)!
wsl:Windows Subsystem for Linux 即linux子系统
wsl 1 :第一代的wsl,用的是Windows内核模拟的各种系统接口。 下文中,WSL默认指的是 WSL1
wsl2 :微软改用虚拟机运行linux内核的版本。是一个运行在windows下的linux内核(非发行版),现在一般都用wsl2了
微软官方的介绍 https://learn.microsoft.com/zh-cn/windows/wsl/compare-versions
WSL 1用的是Windows内核模拟的各种系统接口。虽然可以运行大部分Linux应用,但还是有不少依赖于内核的应用是无法正常运行的——例如Docker。另外WSL 1和Windows共用文件系统、网络,有些时候会比较头疼。
而 WSL2 则与此完全不同,WSL2 是第二代 WSL,包含在2020年5月正式发布 Windows 10 v2004 版中。win10 开始内置了一个轻量级虚拟机,经过不断的优化,这个虚拟机实现了与 windows 的高度集成,实现了虚拟机的高性能运行,WSL2 便是运行在虚拟机上的一个完整的 linux 内核。
传统的 VM 体验可能启动速度慢,是独立的,消耗大量资源,需要你花费时间进行管理。 WSL 2 没有这些属性。
启用WSL2的 Linux 系统启动时间非常快,内存占用很少,并且,WSL 2 还可以直接原生运行 Docker,VS Code 编辑器还有 Remote-WSL 插件,相对于完整的 linux 虚拟机只是不支持 systemctl、systemd,不能直接运行图形桌面
可见,WSL2 与 WSL 1 的设计理念有着天翻地覆的变化,WSL 的实现方式显然更为极客,但面临一系列的生态环境和性能的问题,这条路要想走通,简直比登天还难,如今,微软放弃这条路,转而走上虚拟机优化运行原生 linux 内核这条路确实是一条一劳永逸的正路。
WSL 2 拥有完整的 Linux 内核
WSL 2 中的 Linux 内核是 Microsoft 根据最新的稳定版分支(基于 kernel.org 上提供的源代码)构建的。此内核已专门针对 WSL 2 进行了调整,针对大小和性能进行了优化,以便在 Windows 上提供良好的 Linux 体验。 内核将由 Windows 更新提供服务,这意味着你将获得最新的安全修补程序和内核改进功能,而无需自行管理它。
另外,在Windows 11中WSL 2能过访问GPU,这意味着可以使用一些Linux GUI程序,同时使得使用机器学习、人工智能和数据科学等应用场景更加方便快捷。
WSL 2 有 WSL 1 的优点,包括 Windows 和 Linux 之间的无缝集成,启动时间短,资源占用量少,并且无需 VM 配置或管理。 虽然 WSL 2 确实使用 VM,但 VM 是在幕后管理和运行的,因此你将具有与 WSL 1 相同的用户体验。
架构介绍看另一个博客
经过几次调整WSL(用于Linux的Windows子系统,也被称为Bash for Windows)可以用于Docker for Windows。
不过令人遗憾的是目前WSL是不支持Docker的守护进程,但您可以使用Docker CLI连接到通过Docker for Windows或您创建的任何其他VM 运行的远程Docker守护进程
然而,客户端不必与守护进程安装在同一个地方。例如,您可以在开发计算机上使用本地Docker客户端与Azure中的Docker进行通信。这使我们可以让WSL中的客户端与主机上运行的守护进程通信。
注意最好按照下面的顺序安装 避免不必要的问题
新版文档:https://learn.microsoft.com/zh-cn/windows/wsl/install
ps 默认情况下,安装的 Linux 分发版为 Ubuntu
#管理员模式命令行输入
wsl --install #此命令将启用运行 WSL2 并安装 Linux 默认的 Ubuntu 发行版所需的功能。
重启
wsl --set-default-version 2 这个方法只能改变默认的 如果是已经启用了的系统 则这个命令不生效
在Power Shell中输入 wsl -l -v 可以查看WSL的版本
旧版文档:https://learn.microsoft.com/zh-cn/windows/wsl/install-manual
简要步骤说明如下
建议现在转到步骤 #2,更新到 WSL 2,但如果只想安装 WSL 1,现在可以重新启动计算机,然后继续执行步骤 6 - 安装所选的
Linux 发行版。 若要更新到 WSL 2,请等待重新启动计算机,然后继续执行下一步。
VirtualMachinePlatform和hyper v不一样的
在Power Shell中输入 wsl -l -v 可以查看WSL的版本
优先使用新版文档,若不行再旧版
win下的centos好像有问题
特别微软商店里那个 root权限似乎都没有
推荐商店下载Windows Terminal 可以开启多窗口cmd 而且更好看
一个非常使用的技巧是,通过管道将指令的输出结果传入Windows的剪贴板。按下 Win+V 可以开启超级剪贴板。(首次按下 Win+V 需要点击打开,开启超级剪贴板)。
wsl等更多使用技巧(免密登录ssh、WSL中的服务开机自启动等等)可以看 https://zhuanlan.zhihu.com/p/394776349
子系统内使用命令记得wsl内先sudo 到root!
使用docker for windows 子系统内无需再安装docker,且子系统自己安装docker的方式我试了没成功
新版4.92也许可能出问题 下载旧版4.8。4.12也有问题emmm
安装的时候记得默认勾选wsl替换hyperv那个选项 或者软件内设置
echo "export DOCKER_HOST='tcp://0.0.0.0:2375'" >> ~/.bashrc
source ~/.bashrc
# 检查dockerd进程启动
service docker status
ps aux|grep docker
# 查看 Docker 版本
docker version
# 检查拉取镜像等正常
docker pull mysql
docker images
WSL2 Docker最爽的地方是和宿主机Win10共享network,我们在宿主机Win10使用localhost加端口号就可以访问Docker中对应container中的服务,十分方便
如果有vpn代理 那么可能出现问题 https://zhuanlan.zhihu.com/p/151392411这里解决
低版本的windows用docker toolbox 功能上没有docker desktop全 而且好像不需要开hv 那些乱七八糟的?
似乎不能编辑/etc/docker/daemon.json
下的jsion文件的方式添加
得去docker desktop的setting下,在配置文件中加入
加入以下配置项
{
"registry-mirrors": ["https://dockerproxy.com","https://hub-mirror.c.163.com","https://mirror.baidubce.com","https://ccr.ccs.tencentyun.com"]
}
请看另一篇博客关于windows容器的介绍
开始更换国内镜像源(注意:如果你选择的不是 Ubuntu18.04,这一步不太一样)
WSL 默认源的服务器地址在国外,速度很慢,强烈建议使用国内源,而不同 Linux 发行版镜像源文件地址不一样,比如 Ubuntu 是在 /etc/apt/sources.list,Centos 是在/etc/yum.repos.d/CentOS-Base.repo ,同一 Linux 发行版的不同版本使用的源文件仓库地址也是不一样,这点需要注意。
如果是新手小白朋友,WSL 换源操作可以参考这篇文章:教你如何将WSL系统更换国内源?+固定路径+国内镜像源+详细教程
进入终端,输入以下命令
切换到源路径
cd /etc/apt
备份 Ubuntu 原始源
cp sources.list sources.list.bak
开始换源
sudo vim sources.list
1
2
3
4
5
6
7
8
Ubuntu18.04 阿里镜像源
deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
1
2
3
4
5
6
7
8
9
10
Ubuntu18.04 中科大镜像源
deb https://mirrors.ustc.edu.cn/ubuntu/ bionic main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ bionic main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse
1
2
3
4
5
6
7
8
9
10
Ubuntu18.04 清华镜像源
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse
1
2
3
4
5
6
7
8
9
10
换源之后,进行更新
更新源
sudo apt update
更新软件包
sudo apt upgrade
————————————————
版权声明:本文为CSDN博主「陈所长研究室」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_42362605/article/details/124898062
卸载,报错,原因就是 docker 这个服务已经停了,如果一个服务从来没有被运行过,则他无法被卸载,太狗了
$ sudo apt remove docker-ce
Reading package lists... Done Building dependency tree Reading state information... Done The following packages were automatically installed and are no longer required: containerd runc Use 'sudo apt autoremove' to remove them. The following packages will be REMOVED: docker-ce 0 upgraded, 0 newly installed, 1 to remove and 0 not upgraded. After this operation, 62.7 MB disk space will be freed. Do you want to continue? [Y/n] y (Reading database ... 30768 files and directories currently installed.) Removing docker-ce (1.13.1-0ubuntu1~16.04.2) ... invoke-rc.d: could not determine current runlevel * Stopping Docker: docker No process in pidfile '/var/run/docker-ssd.pid' found running; none killed. invoke-rc.d: initscript docker, action "stop" failed. dpkg: error processing package docker-ce (--remove): subprocess installed pre-removal script returned error exit status 1 dpkg: error while cleaning up: subprocess installed post-installation script returned error exit status 1 Errors were encountered while processing: docker-ce E: Sub-process /usr/bin/dpkg returned an error code (1)
报错信息就是上面这样,网上搜了一下,有人给出了相似的经历,但是解决方案都不行,最终在 GitHub issue 上找到了一个较相似的解决方案,自己改了一下,就可以了
$ cd /var/lib/dpkg/info
$ sudo vim docker-ce.prerm
然后可以看到里面是这样的东西(我的已经被删除了,网上找的)
if ([ -x "/etc/init.d/docker" ] || [ -e "/etc/init/docker.conf" ]) && \
[ "$1" = remove ]; then
invoke-rc.d docker stop || exit $?
fi
直接将这一整个 if 语句(四行)给注释了(解决方案给出的是将 invoke 那一行注释,但是发现 if 语句会报错,所以把这四行都注释了) ,再重新 apt remove docker-ce 就能够将 docker 给卸载了
客户端打开提示:
Docker failed to initialize. Docker Desktop is shutting down
win自己的 cmd 显示:
error during connect: In the default daemon configuration on Windows,
the docker client must be run with elevated privileges to connect.:
Get http://%2F%2F.%2Fpipe%2Fdocker_engine/v1.24/containers/json:
open //./pipe/docker_engine: The system cannot find the file specified.
wsl或者发行版内 docker命令显示:
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
System has not been booted with systemd as init system (PID 1). Can't operat
论坛比较全的错误总结:
https://forums.docker.com/t/solved-docker-failed-to-start-docker-desktop-for-windows/106976/39
可能的解决方案
# win的cmd下管理员
cd "C:\Program Files\Docker\Docker"
DockerCli.exe -SwitchDaemon
docker: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?.See 'docker run --help'.
为了方便开发需要在子系统下安装Docker来部署推送一些镜像资源,可惜的是目前的wsl是不支持Docker的守护进程的,但是可以通过安装Docker利用Docker CLI链接到远程的Docker守护进程来实现
确保安装docker配置连接那里做了
System has not been booted with systemd as init system (PID 1). Can‘t operate.
System has not been booted with systemd as init system (PID 1). Can‘t operate.问题解决方法
ichen820 于2021-07-10 14:28:16
在这里插入图片描述
用window10下WSL使用Ubuntu来用Docker
当我使用命令sudo systemctl start docker的时候报错:
System has not been booted with systemd as init system (PID 1). Can’t operate.
查了原因:
如果是一般的Linux操作系统,可能是因为Linux中没有使用systemd,想用systemd命令来管理Linux上的服务,因此会报错,很可能是使用的是经典的SysV init(sysvinit)系统。
但我这个是window10下WSL的Ubuntu,就会使SysV init而不是systemd。
解决方法:
更换命令,用SysV init的命令代替systemd的
每次重启电脑后给 wsl2 分配的 IP 一般都会变动,我们要连接子系统内部的应用频繁换 IP 会很麻烦,参照别人的解决方法,可以给 Ubuntu 子系统中添加一个新的网卡来给宿主机连接用。
1 查看安装的是哪个子系统发行版本
C:\Users\cdavid>wsl -l
适用于 Linux 的 Windows 子系统分发版:
Ubuntu-18.04 (默认)
2 在子系统中创建 init.wsl
sudo vim /etc/init.wsl
输入以下内容
#network static ip
ip addr add 192.168.50.28/24 broadcast 192.168.50.255 dev eth0 label eth0:1
#docker start
service docker start
给文件进行授权
sudo chmod +x /etc/init.wsl
3 在 Windows 创建 bat 脚本,输入以下内容,放在 C 盘目录下(哪里都想,不要随手删了就行)。
初始化脚本,注意这是 Ubuntu-18.04 和你的发行版本对应
wsl -d Ubuntu-18.04 -u root /etc/init.wsl
添加一个网卡
netsh interface ip add address “vEthernet (WSL)” 192.168.50.93 255.255.255.0
在Windows下 输入快捷键 WIN+R 打开运行窗口,输入 shell:startup,该目录下新建 ubuntu.vbs。
set ws=WScript.CreateObject(“WScript.Shell”)
ws.Run “C:\wsl2-start.bat”,0
进入子系统,输入ifconfig, 以后 192.168.50.28 就是 WSL 的固定 IP 地址了
https://blog.csdn.net/qq_42362605/article/details/124898062
你会发现这个Docker怎么都启动不了,那现在怎么办?一定要先看日志(/var/log/docker.log )
service docker status输出:
docker dead but subsys locked
各种找资料
尝试:
rm -rf /var/run/docker.*
rm -rf /var/lock/subsys/docker
(备注:如果有需要备份的docker此处千万不要用rm -rf /var/lib/docker,否则会删除所有容器数据)
尝试:
service docker stop
thin_check /var/lib/docker/devicemapper/devicemapper/metadata
thin_check --clear-needs-check-flag /var/lib/docker/devicemapper/devicemapper/metadata
service docker start
最后的办法
docker -d可以启动
那就采用
nohup docker -d &
先临时用着,后续有空更深入研究。
————————————————
版权声明:本文为CSDN博主「普通网友」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/Ajekseg/article/details/124173562
官方文档有写
以非root用户身份管理Docker
Docker 守护进程绑定到 Unix 套接字而不是 TCP 端口。默认情况下,Unix 套接字归用户所有root,其他用户只能使用sudo。Docker 守护程序始终以root用户身份运行。
如果您不想在docker命令前加上sudo,请创建一个名为 docker 的Unix组并将用户添加到其中。当 Docker 守护进程启动时,它会创建一个可供docker组成员访问的 Unix 套接字。
该docker组授予与root 用户等效的权限。有关这如何影响系统安全性的详细信息,请参阅Docker Daemon Attack Surface。
创建 docker 组
sudo groupadd docker
1
将用户添加到 docker 组中
sudo usermod -aG docker $USER
1
注销并重新登录
验证是否可以不使用 sudo 运行docker
docker run hello-world
1
若报下方的错误
WARNING: Error loading config file: /home/user/.docker/config.json
stat /home/user/.docker/config.json: permission denied
则修改权限
sudo chown “
U
S
E
R
"
:
"
USER":"
USER":"USER” /home/“
U
S
E
R
"
/
.
d
o
c
k
e
r
−
R
s
u
d
o
c
h
m
o
d
g
+
r
w
x
"
USER"/.docker -R sudo chmod g+rwx "
USER"/.docker−Rsudochmodg+rwx"HOME/.docker” -R
————————————————
版权声明:本文为CSDN博主「MAVER1CK」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_35395195/article/details/125381254
Error: listen tcp 0.0.0.0:****: bind: An attempt was made to access a socket in a way forbidden by its access permissions.
Error: listen tcp 127.0.0.1:****: bind: An attempt was made to access a socket in a way forbidden by its access permissions.
提示:端口拒绝访问(本文示例端口是8001)
查看对应的端口号 8001 是否被占用,netstat -aon|findstr 8001
如果被占用,运行命令taskkill /pid 8001 -t -f结束进程,则问题解决
如果未被占用,则需要查看端口号是否在 Hyper-V 保留tcp端口范围内,开始到结束范围内的端口不可用, netsh interface ipv4 show excludedportrange protocol=tcp,结果可以看到 8001 确实在在排除范围内
解决方法如下 :
最简单的办法就是修改程序或命令使用的端口
如果不修改使用端口,就需要修改保留端口,修改方法如下:
最简单的办法-重启电脑:保留的端口是随机的,每次重启电脑都会改变,因此可以通过重启电脑来解决。
重新设置一下【TCP 动态端口范围】,让 Hyper-V 只在设定的范围内保留端口即可:(管理员权限)
netsh int ipv4 set dynamic tcp start=49152 num=16384
netsh int ipv6 set dynamic tcp start=49152 num=16384
先执行以上两个命令,然后重启电脑。
重启后运行命令 netsh int ipv4 show dynamicport tcp 查看TCP动态端口范围
或者运行命令 netsh interface ipv4 show excludedportrange protocol=tcp查看TCP排除范围
https://blog.csdn.net/qq_42362605/article/details/124898062
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。