podman desktop平稳替换docker desktop
由于docker desktop商业化限制,导致在公司办公不能免费使用。所以就找podman desktop做下替换,容器需要平稳切换,且不能丢失数据,研究了一天,碰到了好几个坑,so 做下记录:方便他人、提高自己。
目录
坑一:其他几个牛逼大佬一时图方便,直接在容器内装了插件(开发环境),所以此次切换需要将docker的容器导出为镜像再导入podman内。
坑一:其他几个牛逼大佬一时图方便,直接在容器内装了插件(开发环境),所以此次切换需要将docker的容器导出为镜像再导入podman内。
1、先从docker中导出容器为镜像
docker commit -a "作者" -m "备注" 容器ID 镜像名:Tag
例:docker commit -a "zsh" -m "create new" 028ed49db22a test:1.0
2、导出镜像到本地
docker save 镜像ID -o 名称.tar
docker save 034162c5df77 -o test.tar
3、导入到podman
podman load -i test.tar
4、给导入的test镜像命名、打tag
podman tag 034162c5df77 test:1.0
5、以此镜像运行容器(与docker命令相同,只需要把docker改为podman即可)
podman run -d --name test -p 5010:5010 -p 8001:8000 -v D:\test\www:/var/www 034162c5df77 /bin/bash -c "tail -f /dev/null"
坑二:安装podman检查界面一直报错:WSL version should be >= 1.2.5.
Call 'wsl --update' and 'wsl --version' in a terminal to check your wsl version.
这个报错,给我恶心半天。。。给出的提示'wsl --version' 是无法运行的,不能识别此命令,使用管理员权限运行cmd,执行'wsl --update'后更新了一次,重启电脑还是这个报错,再次执行显示已经无更新。然后将wsl升到2试了还是不行。
查了下发现也有很多人遇到此问题,(一般情况下用这里提到的方法都可以解决)如下:"WSL version should be >= 1.2.5" when installing Podman via Podman Desktop, but fully up to date · Issue #26837 · containers/podman
但是我这里情况比较特殊,按照这里面的方式试了一遍都不行。后来看了下原因:是由于开发环境电脑系统是windows专业版本,前几年更新的太烦人,我就给更新服务禁掉了,导致系统有点问题。。。。。。算是“自食其果”,打开更新服务,更新了下系统后,再次安装就成功了...
坑三:访问【宿主机IP】+【端口】无法直接访问到容器。
原因:podman在Windows/WSL2 环境下为了安全性和与Linux环境的一致性,其端口映射的默认行为与Docker Desktop不同。它默认只绑定到localhost/127.0.0.1。
对比 Docker Desktop:Docker 默认会自动将容器端口映射到宿主机的 localhost,并通过 Windows 防火墙规则开放外部访问,因此无需额外配置即可通过宿主机 IP 访问。
然后按照网上说的,绑定端口时加上 0.0.0.0:端口 映射 到docker端口,如:
podman run --name 容器 -p 0.0.0.0:8080:80 -d 镜像
这样搞了还是不行,重启podman也不行,折腾了好久。。。
解决方法1:停下来想了下podman 其实是安装到 windows 的 linux 子系统中的,所以使用子系统的ip+端口应该就能访问。试了下果然可行。
先在wsl中使用ifconfig命令查询下子系统的ip:

然后在windows上做一次端口映射转发(需要管理员权限---以管理员权限运行cmd),我要转发88 89端口,则执行如下命令即可
netsh interface portproxy add v4tov4 listenport=88 listenaddress=0.0.0.0 connectport=88 connectaddress=172.19.212.228
netsh interface portproxy add v4tov4 listenport=89 listenaddress=0.0.0.0 connectport=89 connectaddress=172.19.212.228
解决方法2:后来又想了下,如果只是在宿主机上做开发,那么直接在外面再加一层代理呗,把【宿主机ip:端口 】映射到【127.0.0.1:端口】应该也可以了。
在宿主机上安装代理服务,然后做下代理配置即可。
我这里做尝试,图方便直接使用phpstudy中的nginx,在phpstudy_pro\Extensions\Nginx1.15.11\conf\vhost目录下增加一个test.conf配置文件,配置重定向到本地:
server {
listen 89;
server_name "";
rewrite ^/(.*)$ http://127.0.0.1:89/$1 permanent; #跳转
}
然后启动nginx即可。
我这里是本地开发使用。如果需要别人能访问的话,可以这样配置下,如
server {
listen 89;
server_name "";
# rewrite ^/(.*)$ http://127.0.0.1:89/$1 permanent; #跳转
location ^~ / {
proxy_pass http://127.0.0.1:89/;
}
}
坑四:Vmmem占用内存过高,最高占用了70%的内存空间
windows键+R打开运行,输入 %UserProfile% 打开用户文件夹
新建一个文件:Vmmem.wslconfig,配置下占用内存(视自己电脑情况而定)

#.wslconfig
[wsl2]
memory=8GB
swap=4GB
localhostForwarding=true
然后在PowerShell中执行wsl --shutdown命令,重启podman就能看到内存占用降低了
更多推荐


所有评论(0)