mac m3 从 docker desktop 到 podman desktop

podman desktop 安装

brew install podman
brew install –cask podman-desktop
brew tap slp/krunkit
brew install krunkit

podman desktop 配置

podman machine init
podman machine start

如果报错: 没有 krunkit, 参考上文安装 krunkit

sudo podman-mac-helper install

在 podman desktop 中调整虚拟机内存: (Settings -> Resources -> Podman: edit icon, 修改后 Update);
也可在 init 时指定: podman machine init –cpus 4 –memory=8192

https://medium.com/rahasak/switching-from-docker-desktop-to-podman-on-macos-m1-m2-arm64-cpu-7752c02453ec

https://desktop.podman.org.cn/docs/migrating-from-docker/using-podman-mac-helper

迁移镜像(不成功)

docker save -o open-webui.main.tar ghcr.io/open-webui/open-webui:main
podman load -i open-webui.main.tar

会导致 podman 虚拟机卡死无响应, 停也停不了.
问题太大, 算了, 直接重新拉镜像吧.

卸载 docker desktop

sudo /Applications/Docker.app/Contents/MacOS/uninstall

Uninstalling Docker Desktop…
Error: unlinkat /Users/USER_HOME/Library/Containers/com.docker.docker/.com.apple.containermanagerd.metadata.plist: > operation not permitted

解决: (System Settings > Privacy & Security > Full Disk Access), 给使用的 terminal 授予权限

rm -rf ~/Library/Group Containers/group.com.docker
rm -rf ~/.docker

应用程序中, 把 Docker Desktop 拖到回收站

参考: https://docs.docker.com/desktop/uninstall/

使用 kind 安装本地 k8s 集群

  1. 安装 golang 版本管理器 g

cat <<  EOF  >> ~/.zshrc
# 可选。检查g别名是否被占用
if [[ -n $(alias g 2>/dev/null) ]]; then
    unalias g
fi
EOF

curl -sSL https://raw.githubusercontent.com/voidint/g/master/install.sh | bash

  1. 安装 golang
    g ls-remote stable
    g install 1.24.6
    go vesion

  2. 安装 kind
    go install sigs.k8s.io/kind@v0.30.0

  3. 创建 k8s 集群
    kind create cluster

参考: https://kind.sigs.k8s.io/

有坑吗?

不出意外的, 有!

podman 容器读取宿主机留下的docker挂载目录时, 存在权限不足问题, 例如 postgresql 留下的数据目录.
如何解决?

  1. 宿主机上, 为其他用户在目标目录上授予读和执行权限. chmod -R +rx postgre-data (这是宿主目录)
  2. 进入podman虚拟机中, 修改目录权限

# 在宿主机上, 登录podman虚拟机
podman machine ssh
# 查看挂载点, 并转到目录下
mount
df -h
cd /Users/<hostUserName>/<宿主机挂载目标路径>
# 修改属主
sudo chown -R core:games postgre-data

一般这种就是宿主机挂载点

mac m3 从 docker desktop 到 podman desktop

  1. 使用一个临时容器复制文件到新建卷上

# 新建数据卷
podman volume create litellm_pg_data
# 复制数据到新建卷
podman run --rm -it 
  -v "$(pwd)/postgre-data":/host_data 
  -v litellm_pg_data:/container_data 
  redis:8.2.1 
  bash
cp -rp /host_data/. /container_data/

  1. 使用新建卷启动容器

docker run -d 
--name litellm-postgre 
-v litellm_pg_data:/var/lib/postgresql/data 
-p 5432:5432 
-e POSTGRES_PASSWORD=<你的pg密码> 
-e LANG=C.UTF-8 
postgres:latest

方案的不足: 数据的变更, 将保留在 podman 虚拟机中, 无法再在宿主目录中保留.

© 版权声明
THE END
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
艾诗尔的头像 - 鹿快
评论 抢沙发

请登录后发表评论

    暂无评论内容