8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

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

Mystus 2月前

48 0

我正在尝试抓取一个网站,并在抓取后向 Telegram 发送警报。它在没有 Docker 的本地环境中运行。在使用 Docker 进行设置后,我开始收到 \'ETIME...

我正在尝试抓取一个网站,并在抓取后向 Telegram 发送警报。它在没有 Docker 的本地环境中工作。在使用 Docker 设置它之后,我在发送警报时开始收到 \'ETIMEDOUT\' 错误。我很困惑为什么会发生这个错误,因为我仍然可以抓取网站。我尝试过重新启动容器并添加 Google DNS,但它仍然无法持续工作。有时,它尝试几次后会成功,然后继续失败。我很确定 URL 也是正确的。我的操作系统是 Ubuntu。

我用其他 api 做了一些测试。当我调用 google.com 和 jsonplaceholder 时,它可以工作。只有使用 telegram bot api 时才不起作用。域名是 https://api.telegram.org 。其他人说要使用代理。但我住在泰国,甚至无法从我当地的 docker 容器调用。

这是我的 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

帖子版权声明 1、本帖标题:使用 axios 从 docker 容器调用 api 时出现 'ETIMEDOUT' 错误
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由Mystus在本站《ubuntu》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 我正在通过 DigitalOcean 使用 crontab 来运行计划的 cron,我已经设置了一些并且运行正常。但是,我需要运行一个具有以下时间表的 cron:1 日、7 日、10 日早上 8 点...

    我正在通过 DigitalOcean 使用 crontab 来运行计划的 cron,并且我已经设置了一些并且运行正常。但是,我需要运行一个具有以下时间表的 cron:

    一月、四月、七月、十月、十一月和十二月的 1 日、7 日、10 日和 12 日上午 8 点

    现在我每天都在运行它,代码正在检查当前日期是否与我的计划相符,但我认为如果在 crontab 中设置计划会更好:

    0 8 * * * /usr/bin/php /var/www/crons/file-to-run.php

    有人能帮我将上述内容转换为我想要的时间表吗?

    更新 :我已经使用 crontab guru 尝试解决这个问题,我得到了这个:

    0 8 1,7,10,12 1,4,7,10,11,12 * /usr/bin/php /var/www/crons/file-to-run.php

  • 我尝试在 docker compose 文件上使用 1450 和 1500。但仍然不起作用。当我使用 ip link | grep mtu 检查 MTU 时,我有 eth0 和 eth1。两者都是 1500。我正在 Digital Ocean droplet 上运行。

  • 可能是 Docker MTU 导致了这个问题。要解决这个问题,你需要将它添加到你的 /etc/docker/daemon.json .

    {
      "mtu": 1450
    }
    

    这将设置 mtu 为 1450。 docker run 如果您使用 docker compose ,则无需编辑该文件,而是直接在您的 docker-compose.yml 文件中进行配置,如下所示:

    networks:
      default: # Or your network name
        driver: bridge
        driver_opts:
          com.docker.network.driver.mtu: 1450
    

    默认情况下,Docker MTU 设置为 1500。在上面的设置中,它设置为 1450。要找出 Ubuntu 机器上的 MTU 号码,你可以运行

    $ ip link | grep mtu
    
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    2: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
    3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN mode DEFAULT group default
    

    然后,从您的网卡上选择号码。在本例中,它是 ens3 .

返回
作者最近主题: