使用axios从docker容器调用api时出现“ETIMEDOUT”错误

问题描述 投票:0回答:1

我正在尝试抓取一个网站并在抓取后向 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 });
}

enter image description here

node.js docker ubuntu axios
1个回答
0
投票

可能是 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
© www.soinside.com 2019 - 2024. All rights reserved.