由于Docker Hub的自动构建功能已不可用,本README不会自动更新,但会保持最新状态。这也意味着GitHub仓库不再显示为源码来源。镜像现在通过GitLab CI推送,构建过程日志可在GitLab查看。镜像同时发布在GitLab,建议优先使用GitLab仓库的镜像,尤其是在可能触及Docker Hub新限制的情况下。
registry.gitlab.com/kalaksi-containers/tftpd)docker.io/kalaksi/tftpd)本容器运行TFTP服务器,其/tftpboot目录预填充了PXE启动所需的文件和配置,同时兼容U-Boot和Raspberry Pi 4设备。
本容器的设计以简洁性和安全性为核心。许多社区容器默认以root权限运行,且未提供删除不必要权限能力的支持;此外,复杂的shell脚本和非***基础镜像增加了源码验证和镜像更新的难度。为解决这些问题,本镜像在设计时重点关注安全性、简洁性和整体质量。
| 要求 | 状态 | 详情 |
|---|---|---|
| 非root用户运行 | ❌ | 目前无法在非root权限下运行tftpd(需进一步排查原因),但会主动降低权限。 |
| 透明构建过程 | ✅ | 可验证容器与代码一致性,详见GitLab CI。 |
| ***基础镜像 | ✅ | 使用***基础镜像,确保可靠性。 |
| 删除额外权限能力 | ✅ | 详见docker-compose.yml配置。 |
| 无默认密码 | ✅ | 不包含静态默认密码,避免默认不安全配置。 |
| 支持密钥文件 | ✅ | 支持通过文件(而非环境变量)提供敏感信息(如密码)。 |
| 正确处理信号 | ✅ | 容器可正确响应系统信号。 |
| 简洁Dockerfile | ✅ | 不扩展容器职责边界,合理情况下所有逻辑均在Dockerfile中实现。 |
| 版本化标签 | ✅ | 提供版本化标签以确保稳定性。 |
适用于需要构建PXE网络启动环境的场景,包括但不限于:
latest:默认标签,包含最新更新1.1,对应GitHub的1.1.x分支用户需自行填充/tftpboot/boot目录中的启动镜像,并通常需要替换/tftpboot/pxelinux.cfg目录为自定义配置。具体示例可参考源码仓库中的docker-compose.yml。
以下为/tftpboot目录结构示例,包含LibreELEC和RaspBian(Raspberry Pi)的启动文件:
/tftpboot ├── pxelinux.cfg <- PXELINUX配置目录(需挂载自定义目录覆盖以定制) │ └── default <- 默认配置文件 ├── boot <- 存放启动文件的目录(需用户填充) │ ├── libreelec │ │ └── KERNEL <- 示例:LibreELEC内核文件 │ └── root <- 可选特殊目录(内容会复制到TFTP根目录,适用于Raspberry Pi) │ ├── bootcode.bin <- Raspberry Pi必需的根目录文件 │ └── your-rpi4-serial <- 按设备序列号的启动文件目录(详见RPi网络启动文档) │ ├── start.elf │ └── ... │ └── syslinux <- 预填充的Syslinux文件(无需修改) ├── pxelinux.0 <- BIOS启动加载器(传统PXE客户端使用,DHCP需指向"syslinux/pxelinux.0") ├── efi64 │ └── syslinux.efi <- UEFI 64位启动加载器(客户端需指向"syslinux/efi64/syslinux.efi",注意:UEFI+Syslinux可能存在传输速度慢等问题) ├── boot -> ../boot <- 指向boot目录的符号链接 ├── pxelinux.cfg -> ../pxelinux.cfg <- 指向pxelinux.cfg目录的符号链接 └── ...
创建自定义pxelinux.cfg/default文件,示例内容如下:
DEFAULT menu.c32 PROMPT 0 TIMEOUT 100 ONTIMEOUT local MENU TITLE 主菜单 LABEL libreelec MENU LABEL LibreELEC kernel boot/libreelec/KERNEL append <在此插入启动参数> LABEL local MENU LABEL 从本地磁盘启动 LOCALBOOT 0
在部分场景中,TFTP可能速度缓慢或不稳定,此时可使用HTTP传输启动文件。需在kernel和append参数中指定HTTP服务器地址,示例:
kernel [***] append initrd=[***] <其他启动参数>
源码仓库的docker-compose.yml中包含一个注释掉的nginx服务示例,可用于通过HTTP提供启动文件。
建议参考源码仓库中的docker-compose.yml获取完整配置。典型配置需包含TFTP端口映射(UDP 69)、/tftpboot/boot和/tftpboot/pxelinux.cfg目录的挂载(用于自定义启动文件和配置),以及权限能力限制。
bashdocker run -d \ --name tftpd \ --cap-drop=ALL \ --cap-add=NET_BIND_SERVICE \ -p 69:69/udp \ -v /path/to/your/boot:/tftpboot/boot \ -v /path/to/your/pxelinux.cfg:/tftpboot/pxelinux.cfg \ registry.gitlab.com/kalaksi-containers/tftpd:latest
欢迎通过GitHub仓库提交贡献,包括问题反馈、代码改进等。
版权所有 (c) 2018 ***。许可证信息详见LICENSE。
与所有Docker镜像一样,构建后的镜像可能包含其他软件,这些软件可能受其他许可证约束(如基础发行版的软件及依赖项)。使用预构建镜像时,用户有责任确保其使用符合所有包含软件的相关许可证要求。
来自真实用户的反馈,见证轩辕镜像的优质服务
免费版仅支持 Docker Hub 加速,不承诺可用性和速度;专业版支持更多镜像源,保证可用性和稳定速度,提供优先客服响应。
免费版仅支持 docker.io;专业版支持 docker.io、gcr.io、ghcr.io、registry.k8s.io、nvcr.io、quay.io、mcr.microsoft.com、docker.elastic.co 等。
当返回 402 Payment Required 错误时,表示流量已耗尽,需要充值流量包以恢复服务。
通常由 Docker 版本过低导致,需要升级到 20.x 或更高版本以支持 V2 协议。
先检查 Docker 版本,版本过低则升级;版本正常则验证镜像信息是否正确。
使用 docker tag 命令为镜像打上新标签,去掉域名前缀,使镜像名称更简洁。
探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
在 Linux 系统配置镜像加速服务
在 Docker Desktop 配置镜像加速
Docker Compose 项目配置加速
Kubernetes 集群配置 Containerd
在宝塔面板一键配置镜像加速
Synology 群晖 NAS 配置加速
飞牛 fnOS 系统配置镜像加速
极空间 NAS 系统配置加速服务
爱快 iKuai 路由系统配置加速
绿联 NAS 系统配置镜像加速
QNAP 威联通 NAS 配置加速
Podman 容器引擎配置加速
HPC 科学计算容器配置加速
ghcr、Quay、nvcr 等镜像仓库
无需登录使用专属域名加速
需要其他帮助?请查看我们的 常见问题 或 官方QQ群: 13763429