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
如果是这样,这部分就彻底处理完成了。