This Docker image sets up aftpd inside a docker container.
atftpd is a client/server implementation of the TFTP protocol that implements RFCs 1350, 2090, 2347, 2348, 2349 and 7440.
To use docker-atftpd, follow these steps:
-
Clone and start the container:
docker run -p 69:69/udp \ docker.io/aguslr/atftpd:latest
-
Configure your PXE server to connect to your TFTP server's IP address (e.g.
192.168.1.10
). For example, this would be the configuration for dnsmasq:dhcp-match=set:bios,option:client-arch,0 dhcp-match=set:efi32,option:client-arch,6 dhcp-match=set:efi64,option:client-arch,7 dhcp-match=set:efi64,option:client-arch,9 dhcp-boot=tag:bios,grub/i386-pc/core.0,tfp.lan,192.168.1.10 dhcp-boot=tag:efi32,grub/i386-efi/core.efi,tfp.lan,192.168.1.10 dhcp-boot=tag:efi64,grub/x86_64-efi/core.efi,tfp.lan,192.168.1.10
To configure additional GRUB entries, we can add these to a custom.cfg
file
(e.g. for nextboot.xyz):
menuentry --hotkey=n "netboot.xyz" {
if [ "$_EFI" == true ]; then
if [ "$_ARM64" == true ]; then
chainloader disks/netboot.xyz/boot-arm64.efi
else
chainloader disks/netboot.xyz/boot.efi
fi
else
linux16 grub/memdisk iso raw
initrd16 disks/netboot.xyz/boot.iso
fi
}
We would have to copy the necessary image files into the ./disks
directory so
we can go ahead and mount the volumes as follows:
docker run -p 69:69/udp \
-v "${PWD}"/disks:/data/disks \
-v "${PWD}"/custom.cfg:/data/grub/custom.cfg \
docker.io/aguslr/atftpd:latest
Instead of pulling the image from a remote repository, you can build it locally:
-
Clone the repository:
git clone https://github.com/aguslr/docker-atftpd.git
-
Change into the newly created directory and use
docker-compose
to build and launch the container:cd docker-atftpd && docker-compose up --build -d