转载官方地址 nerdctl/docs/faq.md at v2.0.0 · containerd/nerdctl · GitHub
常见问题和疑难解答
- 项目
- Mac 和 Windows
- 配置
- Kubernetes
- containerd 套接字地址
- 无根
- 如何以非 root 用户身份使用 nerdctl?(无 root 模式)
- nerdctl run -p <PORT>不传播源 IP
- nerdctl run -p <PORT>不适用于 1024 以下的端口号
- 无法 ping
- 主机重启后容器不会自动启动
- 错误failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: unable to apply cgroup configuration: unable to start unit ... {Name:Slice Value:"user.slice"} {Name:Delegate Value:true} ... Permission denied: unknown
- 如何卸载?/无法删除~/.local/share/containerd
项目
nerdctl 与 有何不同docker?
nerdctl 的目标是帮助实验 Docker 中不存在的 containerd 的尖端功能。
这些功能包括但不限于按需镜像拉取(延迟拉取)和镜像加密/解密。另请参阅../README.mdnerdctl 中存在但 Docker 中不存在的功能列表(反之亦然)。
请注意,与 Docker 竞争并不是nerdctl 的目标。这些尖端功能预计最终也将在 Docker 中提供。
ctrnerdctl 与和有何不同crictl?
ctr是与 containerd 捆绑在一起的调试实用程序。
ctr 与 Docker CLI 不兼容,对用户不友好。
值得注意的是,ctr缺少以下 nerdctl 命令的等效项:
nerdctl run -p <PORT>nerdctl run --restart=always --net=bridgenerdctl pull使用~/.docker/config.json和凭证辅助二进制文件,例如docker-credential-ecr-loginnerdctl logsnerdctl buildnerdctl compose up
crictl也有类似的限制。
Mac 和 Windows
nerdctl 能在 macOS 上运行吗?
是的,通过 Linux 虚拟机。
Lima项目为 macOS 提供 Linux 虚拟机,并内置集成 nerdctl。
$ brew install lima
$ limactl start
$ lima nerdctl run -d --name nginx -p 127.0.0.1:8080:80 nginx:alpine
Rancher Desktop for Mac和colima也提供带有 nerdctl 的定制 Lima 机器。
nerdctl 能在 Windows 上运行吗?
Windows 容器:是的,但是是实验性的。
Linux 容器:是的,通过 WSL2。Rancher Desktop for Windows提供了一个nerdctl.exe在 WSL2 机器中包装 nerdctl 二进制文件的程序。
配置
nerdctl 忽略[plugins."io.containerd.grpc.v1.cri"]配置
预期行为,因为 nerdctl 不使用 CRI(Kubernetes 容器运行时接口)API。
请参阅下面的问题以了解如何配置 nerdctl。
如何登录注册表?
使用nerdctl login,或者只是创建~/.docker/config.json。nerdctl 还支持凭证帮助程序二进制文件,例如docker-credential-ecr-login。
如何使用非 HTTPS 注册表?
使用nerdctl --insecure-registry run <IMAGE>。另请参阅registry.md。
如何指定注册中心的CA证书?
创建~/.config/containerd/certs.d/<HOST:PORT>/hosts.toml(或/etc/containerd/certs.d/...对于rootful)以指定ca证书。
# An example of ~/.config/containerd/certs.d/192.168.12.34:5000/hosts.toml
# (The path is "/etc/containerd/certs.d/192.168.12.34:5000/hosts.toml" for rootful)
server = "https://192.168.12.34:5000"
[host."https://192.168.12.34:5000"]
ca = "/path/to/ca.crt"
请参阅https://github.com/containerd/containerd/blob/main/docs/hosts.md了解 的语法hosts.toml。
还支持 Docker 样式的目录。路径~/.config/docker/certs.d适用于 rootless,/etc/docker/certs.d适用于 rootful。
另请参阅registry.md。
如何更改 cgroup 驱动程序?
- 选项 1:
nerdctl --cgroup-manager=(cgroupfs|systemd|none)。 - 选项 2:设置
cgroup_manager属性nerdctl.toml
默认值systemd在 cgroup v2 主机(rootful 和 rootless)上、cgroupfs在 cgroup v1 rootful 主机上、none在 cgroup v1 rootless 主机上。
提示:Kubernetes 的相应配置(io.containerd.grpc.v1.cri)
如何更改快照程序?
- 选项 1:使用
nerdctl --snapshotter=(overlayfs|native|btrfs|...) - 选项 2:设置
$CONTAINERD_SNAPSHOTTER - 选项 3:设置
snapshotter属性nerdctl.toml
默认值为overlayfs。
提示:Kubernetes 的相应配置(io.containerd.grpc.v1.cri)
如何更改运行时?
使用nerdctl run --runtime=<RUNTIME>。
该<RUNTIME>字符串可以是 containerd 运行时插件名称(例如io.containerd.runc.v2),也可以是 runc 兼容二进制文件的路径(例如/usr/local/sbin/runc)。
提示:Kubernetes 的相应配置(io.containerd.grpc.v1.cri)
如何更改 CNI 二进制路径?
- 选项 1:使用
nerdctl --cni-path=<PATH> - 选项 2:设置
$CNI_PATH - 选项 3:
cni_path在 中设置属性nerdctl.toml。
通过检查以下候选项自动检测默认值:
~/.local/libexec/cni~/.local/lib/cni~/opt/cni/bin/usr/local/libexec/cni/usr/local/lib/cni/usr/libexec/cni/usr/lib/cni/opt/cni/bin
提示:Kubernetes 的相应配置(io.containerd.grpc.v1.cri)
Kubernetes
nerdctl ps -a不显示 Kubernetes 容器
尝试sudo nerdctl --namespace=k8s.io ps -a。
注意:k3s 用户也必须指定--address:sudo nerdctl --address=/run/k3s/containerd/containerd.sock --namespace=k8s.io ps -a
如何为 Kubernetes 构建镜像?
对于多节点群集:
$ nerdctl build -t example.com/foo /some-dockerfile-directory
$ nerdctl push example.com/foo
对于没有注册表的单节点集群:
# nerdctl --namespace k8s.io build -t foo /some-dockerfile-directory
# kubectl apply -f - <<EOF
apiVersion: v1
kind: Pod
metadata:
name: foo
spec:
containers:
- name: foo
image: foo
imagePullPolicy: Never
EOF
containerd 套接字地址
- 根深蒂固:
/run/containerd/containerd.sock - 无根(例如默认的Lima实例):,
/proc/<PID of containerd>/root/run/containerd/containerd.sock或者您可以运行此命令来找出原因:(echo /proc/$(cat $XDG_RUNTIME_DIR/containerd-rootless/child_pid)/root/run/containerd/containerd.sock为什么它有效 rootlessutil.ParentMain:)
nerdctl 有相当于 的吗DOCKER_HOST=ssh://<USER>@<REMOTEHOST>?
不,只需使用ssh -l <USER> <REMOTEHOST> nerdctl。
nerdctl 有相当于 的吗sudo usermod -aG docker <USER>?
不完全相同,但在二进制chmod +s上设置 SETUID 位()nerdctl可提供类似的用户体验。
<span style="background-color:var(--bgColor-muted, var(--color-canvas-subtle))"><span style="color:#1f2328"><span style="color:var(--fgColor-default, var(--color-fg-default))"><span style="background-color:var(--bgColor-muted, var(--color-canvas-subtle))"><code>mkdir -p $HOME/bin
chmod 700 $HOME/bin
cp /usr/local/bin/nerdctl $HOME/bin
sudo chown root $HOME/bin/nerdctl
sudo chmod +s $HOME/bin/nerdctl
export PATH=$HOME/bin:$PATH
</code></span></span></span></span>
修改$HOME/bin为700Admin 非常重要,否则非预期用户可能会通过 SETUID 位获得 root 权限。
强烈建议不要使用 SETUID 位。尽可能考虑使用Rootless 模式。
无根
如何以非 root 用户身份使用 nerdctl?(无 root 模式)
<span style="background-color:var(--bgColor-muted, var(--color-canvas-subtle))"><span style="color:#1f2328"><span style="color:var(--fgColor-default, var(--color-fg-default))"><span style="background-color:var(--bgColor-muted, var(--color-canvas-subtle))"><code>containerd-rootless-setuptool.sh install
nerdctl run -d --name nginx -p 8080:80 nginx:alpine
</code></span></span></span></span>
参见:
- rootless.md
- Common steps (Read first!) | Rootless Containers
- containerd (nerdctl) | Rootless Containers
nerdctl run -p <PORT>不传播源 IP
默认端口驱动程序的预期行为rootlesskit。
解决办法是将端口驱动程序改为slirp4netns(牺牲性能)。
请参阅containerd (nerdctl) | Rootless Containers。
nerdctl run -p <PORT>不适用于 1024 以下的端口号
设置 sysctl 值net.ipv4.ip_unprivileged_port_start=0。
请参阅[Optional] sysctl | Rootless Containers
无法 ping
设置 sysctl 值net.ipv4.ping_group_range=0 2147483647。
参见[Optional] sysctl | Rootless Containers
主机重启后容器不会自动启动
跑步sudo loginctl enable-linger $(whoami)。
请参阅Login | Rootless Containers。
错误failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: unable to apply cgroup configuration: unable to start unit ... {Name:Slice Value:"user.slice"} {Name:Delegate Value:true} ... Permission denied: unknown
使用 cgroup 驱动程序运行无根容器systemd需要 dbus 作为用户会话服务运行。
否则 runc 可能会失败并出现如下错误:
<span style="background-color:var(--bgColor-muted, var(--color-canvas-subtle))"><span style="color:#1f2328"><span style="color:var(--fgColor-default, var(--color-fg-default))"><span style="background-color:var(--bgColor-muted, var(--color-canvas-subtle))"><code>FATA[0000] failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: unable to apply cgroup configuration: unable to start unit "nerdctl-7bda4abaa1f006ab9feeb98c06953db43f212f1c0aaf658fb8a88d6f63dff9f9.scope" (properties [{Name:Description Value:"libcontainer container 7bda4abaa1f006ab9feeb98c06953db43f212f1c0aaf658fb8a88d6f63dff9f9"} {Name:Slice Value:"user.slice"} {Name:Delegate Value:true} {Name:PIDs Value:@au [1154]} {Name:MemoryAccounting Value:true} {Name:CPUAccounting Value:true} {Name:IOAccounting Value:true} {Name:TasksAccounting Value:true} {Name:DefaultDependencies Value:false}]): Permission denied: unknown
</code></span></span></span></span>
解决方案:
<span style="background-color:var(--bgColor-muted, var(--color-canvas-subtle))"><span style="color:#1f2328"><span style="color:var(--fgColor-default, var(--color-fg-default))"><span style="background-color:var(--bgColor-muted, var(--color-canvas-subtle))"><code>sudo apt-get install -y dbus-user-session
systemctl --user start dbus
</code></span></span></span></span>
如何卸载?/无法删除~/.local/share/containerd
运行以下命令:
<span style="background-color:var(--bgColor-muted, var(--color-canvas-subtle))"><span style="color:#1f2328"><span style="color:var(--fgColor-default, var(--color-fg-default))"><span style="background-color:var(--bgColor-muted, var(--color-canvas-subtle))"><code>containerd-rootless-setuptool.sh uninstall
rootlesskit rm -rf ~/.local/share/containerd ~/.local/share/nerdctl ~/.config/containerd</code></span></span></span></span>
6543

被折叠的 条评论
为什么被折叠?



