tftp サーバーを docker で起動する
サーバー側
準備
docker のインストール
sudo apt install -y docker.io docker-compose
sudo usermod -a -G docker $USER
sudo reboot
firewall の許可
sudo apt install -y firewalld
sudo firewall-cmd --add-port=69/udp --permanent
sudo firewall-cmd --reload
公開するディレクトリ、ファイルの準備
mkdir tftp
echo test > tftp/a.txt
tftp サーバー の docker container の起動
docker run -d -p 69:69/udp -v $(pwd)/tftp:/srv/tftp danrue/tftpd-hpa
(追記) 192.168.11.22:69:69/udp
は不要
当初参考にした https://hub.docker.com/r/pghalliday/tftp に docker run -p 0.0.0.0:69:69/udp -v /var/tftpboot:/var/tftpboot -i -t pghalliday/tftp
とあったので、192.168.11.22:69:69/udp
が必要と考えていたが、明示的に指定する必要はない。
tftp サービスを提供する IP アドレスを 192.168.11.22
とすると以下のように実行する。
docker run -d -p 192.168.11.22:69:69/udp -v $(pwd)/tftp:/srv/tftp danrue/tftpd-hpa
参考
エラー発生時の復旧
192.168.11.22:69:69/udp
の 192.168.11.22
の部分を変えて再起動した場合、
以下のようなエラーが出ることがある。
$ docker run -d -p 192.168.11.22:69:69/udp -v $(pwd)/tftp:/srv/tftp danrue/tftpd-hpa
4c5630dac757afb8349b1d22cb5864d1244119078bef36a104ead78b59b15e86
docker: Error response from daemon: driver failed programming external connectivity on endpoint relaxed_wing (2ff0b8103b4a6c9937de2689f43bc7eda098df84269cd55b9a646b795a5e1c7a): (iptables failed: iptables --wait -t nat -A DOCKER -p udp -d 192.168.11.22 --dport 69 -j DNAT --to-destination 172.17.0.2:69 ! -i docker0: iptables: No chain/target/match by that name.
(exit status 1)).
docker サービスを再起動することにより復旧できる。
sudo systemctl restart docker
参考
クライアント側
準備
sudo apt install -y tftp-hpa
実行
$ tftp 192.168.11.22
tftp> get a.txt
tftp> quit
→ カレントディレクトリに a.txt
が取得される。