在适用于 Linux 的 Windows 子系统 (WSL 2) 上使用 podman 而不是 docker
由 Mux 主办的 DEV 全球展示挑战赛:展示你的项目!
使用适用于 Linux 的 Windows 子系统(WSL) 版本 2,运行 Linux 容器变得简单易行。但是,如果没有 Docker 守护进程运行,Docker 将无法工作。通常情况下,系统服务 systemd用于管理 Docker 守护进程,而 WSL 通常不会运行 systemd。
进入podman。
Podman 是 Docker 命令行工具的直接替代品。它是“无守护进程”的(也就是说,不需要 systemd 或其他服务在后台运行),并且由 Red Hat 提供支持。Podman 也无需 root 权限即可良好运行——换句话说,容器可以轻松地在用户空间运行。
请注意,即使不使用 systemd,也可以在几乎任何 WSL 发行版上运行 Docker 守护进程,甚至无需 Docker Desktop。我在另一篇文章中记录了我的配置。但我仍然更倾向于使用 podman,原因已在本文中阐述。
我使用的是 Fedora 系统(您可以阅读更多关于如何在 WSL 上安装 Fedora 的信息)。在我的配置中,我需要进行一些简单的配置才能使 podman 正常工作并以无 root 用户身份运行。以下是我使用的步骤。
安装 podman
要安装 podman,请按照官方说明进行操作。您的发行版的相关指南很可能也包含在其中。
简要总结:
- Fedora:
sudo dnf install podman - Centos:
sudo yum --enablerepo=extras install podman - Debian 11 (bullseye) 或更高版本,或 sid/unstable:
sudo apt install podman - ArchLinux:
sudo pacman -S podman然后是针对无根模式的调整 - Debian 10:请参阅指南了解如何设置
apt使用Kubic 软件仓库,然后确保运行sudo apt update以下命令。sudo apt install podman
设置 $XDG_RUNTIME_DIR
如果没有 systemd,podman 就无法使用 $XDG_RUNTIME_DIR 来存放临时文件。我已将以下内容添加到我的~/.bashrc文件中:
if [[ -z "$XDG_RUNTIME_DIR" ]]; then
export XDG_RUNTIME_DIR=/run/user/$UID
if [[ ! -d "$XDG_RUNTIME_DIR" ]]; then
export XDG_RUNTIME_DIR=/tmp/$USER-runtime
if [[ ! -d "$XDG_RUNTIME_DIR" ]]; then
mkdir -m 0700 "$XDG_RUNTIME_DIR"
fi
fi
fi
此脚本检查是否已设置 $XDG_RUNTIME_DIR,如果未设置,则将其设置为 systemd 的默认位置(/run/user/$UID)。如果该位置不存在,则为当前用户创建一个临时目录。
(现在运行 `source .bashrc` 命令source ~/.bashrc来更新环境变量。)
使用文件日志记录和 cgroupfs。
你有 `/etc/config/config.yml` 或 `/etc/config/config.yml` 文件吗/etc/containers/containers.conf?~/.config/containers/containers.conf如果有,那就太好了。在 Fedora 系统(以及其他一些发行版)上,你可能首先需要将 `/etc/config/config.yml` 文件复制/usr/share/containers/containers.conf到/etc/containers`/etc/config/config.yml` 和/或 `/etc/config/ ~/.config/containersconfig.yml` 目录。文件创建完成后,请编辑它,确保:
cgroup_manager = "cgroupfs"(非 systemd)events_logger = "file"(非 journald)log_driver = "k8s-file"(非 journald)
Fedora 系统上的 shadow-utils 存在问题
在 Fedora 系统上,我必须重新安装 shadow-utils 才能正确安装newgidmap它newuidmap:
sudo dnf reinstall shadow-utils
测试并成功
以下命令应该会显示一个简单的命令提示符:
$ podman run -it docker.io/library/alpine:latest
Trying to pull docker.io/library/alpine:latest...
Getting image source signatures
Copying blob df20fa9351a1 done
Copying config a24bb40132 done
Writing manifest to image destination
Storing signatures
/ #
享受!
参考:
文章来源:https://dev.to/bowmanjd/using-podman-on-windows-subsystem-for-linux-wsl-58ji