我正在尝试在 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),但两者都不起作用。
我尝试禁用主机上的防火墙,但这也无济于事,这不是防火墙问题吗?
如能得到任何帮助或者提供其他解决方案,我们将不胜感激。
答案1
TFTP 在协商传输时使用 por 69,但实际的数据传输发生在临时端口上;请尝试
docker run --name tftp -p 69:69/udp -p 65500-65515:65500-65515/udp v /var/tftpboot/:/var/tftpboot -d local-tftp
或者考虑到您的 TFTP 服务器使用的临时端口,像这样。
答案2
我在调试类似问题时偶然发现了这个问题。对我来说,解决方案是将选项添加--network=host
到docker run
命令中。
答案3
原来是我的客户端防火墙阻止了现有连接。禁用防火墙(或允许现有连接)解决了这个问题。