速记: docker: Error response from daemon: attaching to network failed, make sure your network options are correct and check manager logs: context deadline exceeded.
为了跑 Wisper 语音转文字服务, 我买了一个新的 4070TI显卡的主机.不想大改其他既有的东西, 所以就使用了 docker 的 overlay network 来连接两个机器.
但是, 发现: 节点能加入 swarm, 但是无法加入 network.看日志报错:
Error response from daemon: attaching to network failed, make sure your network options are correct and check manager logs: context deadline exceeded.
根据提示, 尝试去看 docker 本身的日志.日志很长,而且默认从前到后, 翻了好几页,终于不耐烦; 于是又找了一个从后往前, 总是看最新100条日志的方法:
journalctl -xu docker.service -n 100 -f --no-pager
关键日志:
Nov 29 19:14:27 devhome dockerd[937]: time=”2023-11-29T19:14:27.505124802+09:00” level=error msg=”Error in responding to bulk sync from node 192.168.132.144: failed to send a TCP message during bulk sync: dial tcp 192.168.132.144:7946: i/o timeout”
进一步分析:
# 在 Leader 节点测试端口(NG)
telnet 192.168.132.144 7946
# 在worker节点本身测试.(OK)
telnet localhost 7946
说明大概率是防火墙的问题:
sudo ufw status
防火墙确实是打开了, 并且只放行了 22 端口.
解决方法就是,关闭防火墙:
sudo ufw disable
快速测试下是否可以加入 overlay network:(OK)
docker run --name=hello-world --network $some-network-overlay hello-work
有点奇怪! 我查询了文档, Ubuntu的防火墙默认应该是关闭的.可能是设置某些东西的时候, 不小心开启了.也不排除 desktop 和 server版 ,各自的防火墙默认设置不一样. 暂时不想进一步查. 如果后续再遇到什么诡异的问题, 可能就靠谱全部改成 server 版 ubuntu.
在这个问题的过程中, 还发现 两个节点的 docker engine 的版本不一样.顺便也修改了下:
# 在另一个机器上安装指定版本的 docker.ref: https://docs.docker.com/engine/install/ubuntu/#install-using-the-repository
VERSION_STRING=5:23.0.5-1~ubuntu.22.04~jammy
sudo apt-get install docker-ce=$VERSION_STRING docker-ce-cli=$VERSION_STRING containerd.io docker-buildx-plugin docker-compose-plugin