安装 Podman

1
2
3
4
5
6
7
8
#刷新软件包,之前执行过可以不用再次刷新
#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 的安装方法

1
2
3
apt install pip
pip3 install podman-compose
podman-compose --version

Debian12 的安装方法

1
apt install podman-compose

挂载 / sys/fs / 目录为可读写,Hax 机必做

1
2
3
4
5
6
7
8
9
10
11
12
13
#执行这条命令,挂载/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 机器

1
2
3
4
5
6
7
8
9
10
11
#可以使用其他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,随时可能失效!

1
2
#搭建在Hax机,链接是IPv6的,随时可能失效,请自行保存
wget http://c.umtx.eu.org:5244/d/guest/6053537_portainer-ce_latest.tar

读取文件为镜像

1
2
3
4
5
6
7
8
9
10
11
12
#查看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 容器

镜像搞定了,接下来部署镜像为容器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#创建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
1
2
3
4
5
6
7
podman run -d \
--restart=always \
--name=portainer \
--network=host \
-v /run/podman/podman.sock:/var/run/docker.sock \
-v /docker/portainer/data:/data \
6053537/portainer-ce:latest

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 容器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#创建目录
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 懂个锤子,就会瞎编,尽耽误人事