我试图在 docker 中设置 TFTP 服务器作为设置 PXE 引导的第一步,但我无法连接到它。
我使用命令启动容器docker run --name tftp -p 0.0.0.0:69:69/udp -v /var/tftpboot/:/var/tftpboot -d local-tftp
。
从容器内部我可以运行curl -o ./foo tftp://0.0.0.0/foo
并且它可以工作,从容器外部我从 docker 主机或网络上的另一台计算机运行相同的命令(使用正确的 ip),两者都不起作用。
我尝试禁用主机上的防火墙,但这也无济于事,这不是防火墙问题。
感谢您提供任何帮助或设置此设置的替代解决方案。
我在调试类似问题时偶然发现了这个问题。我的解决方案是将
--network=host
选项添加到docker run
命令中。TFTP 在协商传输时使用端口 69,但实际数据传输发生在临时端口上;尝试
docker run --name tftp -p 69:69/udp -p 65500-65515:65500-65515/udp v /var/tftpboot/:/var/tftpboot -d local-tftp
或考虑到您的 TFTP 服务器使用的临时端口类似的东西。
原来是我客户的防火墙阻止了现有的连接。禁用它(或允许现有连接)解决了这个问题。