我正在尝试抓取一个网站并在抓取后向 Telegram 发送警报。它在没有 Docker 的本地环境中运行。使用 Docker 设置后,我在发送警报时开始收到“ETIMEDOUT”错误。我很困惑为什么会发生这个错误,因为我仍然可以抓取网站。我尝试过重新启动容器并添加 Google DNS,但它仍然无法稳定工作。有时,尝试几次后就一直失败。我很确定该网址也是正确的。我的操作系统是Ubuntu。这是我的 Axios 代码和错误消息。
async sendToTelegram(text: string) {
let token = process.env.TELEGRAM_BOT_TOKEN;
let url = `https://api.telegram.org/bot${token}/sendMessage`;
console.log(url);
let group_id = process.env.TELEGRAM_GROUP_ID;
let params = {
chat_id: group_id ? group_id : "",
text
};
await axios.get(url, { params });
}
可能是 Docker MTU 导致了该问题。要修复它,您需要将其添加到您的
/etc/docker/daemon.json
。
{
"mtu": 1450
}
当您使用
mtu
时,这会将 docker run
设置为 1450。如果您使用 docker compose
,则无需编辑该文件,而是直接在 docker-compose.yml
文件中配置它,如下所示:
networks:
default: # Or your network name
driver: bridge
driver_opts:
com.docker.network.driver.mtu: 1450