▱ 笔记#PVE

PVE vm 常见问题

PVE虚拟机网络超时、容器端口映射及ZFS磁盘容量问题的排查与解决方法如下。已为您整理为留档保存的格式。

一、PVE虚拟机网络超时排查与解决

(以构建Docker错误为例)

当PVE虚拟机内部使用NAT/桥接映射时,网络超时通常由以下三个原因引起。请按优先级依次排查与解决:

  • 配置 Docker 镜像加速源

在VM终端中执行以下命令,直接复制整段命令并按回车:

mkdir -p /etc/docker
cat <<EOF > /etc/docker/daemon.json
{
"registry-mirrors": [
"https://docker.m.daocloud.io",
"https://dockerproxy.net",
"https://mirror.gcr.io"
]
}
EOF
systemctl daemon-reload
systemctl restart docker
  • 修改 DNS 解析

在VM终端中执行以下命令,直接复制整段命令并按回车:

cat <<EOF > /etc/resolv.conf
nameserver 223.5.5.5
nameserver 119.29.29.29
nameserver 8.8.8.8
EOF
  • 修改 Dockerfile(避免拉取语法插件)

进入项目目录(例如 /opt/pan):

cd /opt/pan
nano Dockerfile

在编辑器中找到 # syntax=docker/dockerfile:1.7 这一行,并将其完全删除。保存并退出编辑器后,重新运行构建命令。


二、容器端口映射问题

  • 如果容器的端口映射显示为 127.0.0.1:8080->8080/tcp,这意味着该端口仅能被容器宿主机自身访问,外部无法访问。

解决方法: 将端口映射中的 127.0.0.1 修改为 0.0.0.0。

  • 宿主机使用 Caddy 反向代理 VM

推荐直接使用 Caddy 反向代理到虚拟机的内部 IP 和端口:

os.abc.xyz {
    encode zstd gzip

    reverse_proxy http://192.168.100.50:8080 {
        transport http {
            read_timeout 1h
            write_timeout 1h
        }
    }
}

三、前端仅显示单块硬盘容量

示例:OVH 16THDD 安装 PVE9 组 RAID 10,前端仅显示单块硬盘容量,这是因为 ZFS 文件系统设置了配额(quota)

解决方法: 取消 data/zd0 的配额,使其能够使用整个 ZFS 池的容量:

zfs set quota=none data/zd0

执行后,再次运行 zfs list 命令进行确认。如果不成功,继续往下操作!

也就是说,你前面并没有真正执行成功 growpart,或者根本还没执行它。当前这一步还没到 ZFS 扩容,必须先把四个 part5 从约 1.8T 扩到约 3.6T。

先执行:

which growpart

如果没有任何输出,就安装:

apt update
apt install -y cloud-guest-utils

接下来执行:

growpart /dev/sda 5
growpart /dev/sdb 5
growpart /dev/sdc 5
growpart /dev/sdd 5

正常成功时应该看到类似:CHANGED: partition=5 ...

执行完先不要马上做 zpool online -e,先检查:

fdisk -l /dev/sda
fdisk -l /dev/sdb
fdisk -l /dev/sdc
fdisk -l /dev/sdd

我们希望看到 sda5/sdb5/sdc5/sdd5 从:1.8T 变成约:3.6T

如果这一步成功,再执行:

zpool set autoexpand=on data

然后:

zpool online -e data wwn-0x5000cca0bcd72307-part5
zpool online -e data wwn-0x5000cca250d68821-part5
zpool online -e data wwn-0x5000cca0bcdaa5a5-part5
zpool online -e data wwn-0x5000cca097cffe88-part5

最后检查:

zpool list
zfs list

目标应该接近:

data SIZE ≈ 7.2T
data/zd0 AVAIL ≈ 7.0T

后建议你再执行一次:

zpool status
zpool get autoexpand data
zfs get quota data/zd0

正常应该分别看到:

state: ONLINE
autoexpand: on
quota: none

如果是这样,这部分就彻底处理完成了。