Hax机器安装Podman(某些无法安装docker的VPS可能有效的替代方案)
博客逐步迁移中,文章链接可能失效,但博客和文章不会丢(自己翻一下文章列表)
自行确保网络畅通,比如IPv6only的机器安装WARP等。
以下命令均使用root账户操作
安装Podman
#刷新软件包,之前执行过可以不用再次刷新
#apt update
#安装Podman,Debian11的软件源中只有Podman3.x,Debian12的有Podman4.x
apt install podman
#查看是否安装成功,以及Podman的一些
podman info
安装podman-compose(可选)
如果不需要podman-compose的话,可以不装pip和podman-compose
我测试觉得podman-compose并不太好用,和docker-compose的差别有点点大,特别是网络
Debian11的安装方法
apt install pip
pip3 install podman-compose
podman-compose --version
Debian12的安装方法
apt install podman-compose
挂载/sys/fs/目录为可读写,Hax机必做
#执行这条命令,挂载/sys/fs/目录为可读写,Hax机必做,
#否则无法启动任何容器 也无法在portainer中拉取容器
mount -o remount,rw /sys/fs/cgroup
#上面的命令重启会失效,所以需要把这条mount命令粘贴到开机自启文件/etc/rc.local中
#没有nano的,也可以用vi来编辑
nano /etc/rc.local
粘贴到exit 0 之前,然后Ctrl+X 按Y 按回车 保存并退出
#测试podman是否正常,--rm是容器停止后自动删除。正常来说是能pull这个镜像的。
#如果有WARN黄字警告不用管,没多大影响,我不知道怎么解决这个警告
podman run --rm hello-world
解决无法拉取镜像的问题
可能是hax机器或者debian11中podman3.x的BUG,导致无法直接在命令行拉取容器,podman pull
会失败!
拉取其他第三方镜像就会出现问题,无法拉取!但docker官方的docker.io/library/xxx的却可能可以拉取
那么第三方镜像怎么拉取呢?我发现在Portainer这个docker管理面板中,可以正常拉取镜像
所以我们需要利用Portainer这个容器来拉取镜像,那么问题来了,Portainer容器的镜像就无法拉取啊,
当然有解决办法,docker为不能连接互联网的机器提供的解决方法是,从可以联网的docker机器,拉取镜像然后保存为文件,自行将文件拷贝到目标机器,在目标机器上读取文件为镜像,这样有了镜像就能创建容器了。
我拉取的是6053537的portainer-ce,他自带中文,你可以用官方的portainer然后自己打中文版补丁 官方portainer/portainer-ce:latest
方法1: 自行从别个docker环境pull save 上传到Hax机器
#可以使用其他docker保存的镜像,命令docker save 镜像名 -o 文件名.tar ,然后上传到hax机子然后 podman load -i 文件名.tar,读取为镜像
#另一个docker环境,可以正常docker pull的,保存镜像为归档文件
#拉取镜像
docker pull 6053537/portainer-ce:latest
#docker save 镜像名或ID -o 文件名.tar 例如:
docker save 6053537/portainer-ce:latest -o 6053537_portainer-ce_latest.tar
#查看镜像文件信息
ls -lh 6053537_portainer-ce_latest.tar
自行上传.tar文件到Hax机器上
方法2: 用Hax机器直接下载我提供的镜像
可以用我提供的Portainer镜像文件,不放心的自己用方法1,文件在hax,纯IPv6,随时可能失效!
#搭建在Hax机,链接是IPv6的,随时可能失效,请自行保存
wget http://c.umtx.eu.org:5244/d/guest/6053537_portainer-ce_latest.tar
读取文件为镜像
#查看Hax机器上的镜像文件信息
ls -lh 6053537_portainer-ce_latest.tar
#Hax机器,读取文件为镜像
#从归档文件读取为镜像,镜像名包含在tar包里了,无法自定义。需要自定义则用 docker tag自己标
podman load -i 6053537_portainer-ce_latest.tar
#查看镜像是否成功读取
podman images
#读取成功就可以删掉该文件了,我这里没删,留作存档
#rm 6053537_portainer-ce_latest.tar
部署Portainer容器
镜像搞定了,接下来部署镜像为容器
#创建Portainer的数据目录,因为Podman不像docker,他不会自动创建不存在目录
#portainer就是个管理面板,其数据即使丢失也不影响其他容器的数据,就是配置丢了得重新配置,所以也可以不用创建这个数据目录,后续也不加-v xxxx:/data \这个命令。
#-p,允许直接创建多级目录
mkdir -p /docker/portainer/data
#容器都建议使用host网络,我测试bridge网络的容器可能无法联通互联网!
#要注意docker的/var/run/docker.sock在podman中的位置是/var/run/podman/podman.sock
podman run -d \
--restart=always \
--name=portainer \
--network=host \
-v /var/run/podman/podman.sock:/var/run/docker.sock \
-v /docker/portainer/data:/data \
6053537/portainer-ce:latest
#查看容器状态
podman ps -a
#有时候可能podman run部署后会启动失败,手动重启一下就星
podman restart portainer
Portainer的初始化超时机制,部署后请尽快登录并初始化,否则需要重启容器后才能初始化,重启容器命令 podman restart portainer
WebUI访问地址是 http://IP:9000
如果你也是IPv6only机器,请用IPv6地址访问,例如http://[2602:xxxx:xxxx:xxxx::xxxx]:9000 WARP本身只能出站,不能入站。
cloudflare的小云朵CDN只支持部分端口,80 443 8080 8443等,不包括9000,要访问9000请不要开启小云朵,另外用个二级域名开小云朵
初始化后就可以在portainer中可以拉取镜像了,portainer的使用教程自行百度。
这样镜像的来源可以不依赖其他机器了,但在portainer中拉取镜像要加上前缀 docker.io/ 例如 docker.io/xhofe/alist:latest
能拉取到镜像,就可以自己玩耍了,尝试用Portainer拉取的镜像,搭建个alist容器
#创建目录
mkdir -p /docker/alist/data
#依然用的是host网络
podman run -d \
--name alist \
--restart always \
--network host \
-v /docker/alist/data:/opt/alist/data \
-e PUID=0 -e PGID=0 -e UMASK=000 \
xhofe/alist:latest
#alist的初始用户名 admin
#alist的初始密码,需要用命令查看,建议复制,防止手抖
podman logs alist
WebUI访问地址是 http://IP:5244
登录后及时更改掉alist初始用户名密码,具体玩法/忘记密码的解决办法,详见 alist的官网 https://alist.nn.ci/zh/
后话
有可能debian11,机器重启后,设置自启的容器会自启失败,手动重启一下即可,有可以一并放入 /etc/rc.local
开机自启的脚本文件,debian12好像不会出现这个问题
podman和docker差不多的,主要差在外部文件配置
这次折腾参考了很多资料,中文/外文的,也问了ChatGPT,充分证实了,通用领域问ChatGPT还行,过于专业的领域/过于深入的东西ChatGPT懂个锤子,就会瞎编,尽耽误人事。。
有群友反馈说,安装podman后,去安装1panel,结果莫名其妙安装上了docker,我没试过,不清楚具体情况