docker cURL error 6: Could not resolve host

场景:

微信小程序 获取 用户 openpid,在此之前,我需要先 "获取稳定版接口调用凭据",根据手册提示的,要先调用

https://api.weixin.qq.com/cgi-bin/stable_token

我这边就开始了请求,结果返回了:

cURL error 6: Could not resolve host: api.weixin.qq.com (see https://curl.haxx.se/libcurl/c/libcurl-errors.html) for https://api.weixin.qq.com/cgi-bin/stable_token

就很头疼,因为之前我是做过这块的,基本上没有问题,没遇到过这个。

好在,第一时间我就想到原因了,环境不同

以前是没有使用 docker 的,本次是使用的 docker 开发,然后我去查阅,很幸运网上都有针对这个问题的解答,并且也标注确实是因为 docker 才发生这个问题的!

先说明一下,发生的原因:

原因分析:
   Docker 容器无法解析局域网内的域名,就算本地主机的 hosts 配置了域名映射也是不行的
   Docker 环境不同于 wamp 或者 Xampp,对于局域网内的域名解析,Docker 需要到 docker 内部配置 hosts 文件
解决步骤:
   进入 docker 容器后,在 docker 文件中,配置域名解析;
   1. docker exec -it 容器ID /bin/bash
   2. vim /etc/hosts
   3. 添加域名解析规则

解决思路明白了,这里面还有一点是未知的,就是第三步,"域名解析"

我们可以先看一下 hosts 文件里面的内容:

127.0.0.1       localhost
::1     localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.26.0.2      264a7fee7843

可以看到其中的一个

127.0.0.1       localhost

而我们也需要添加我们需要的域名,但是 IP 地址是多少呢?

这时候我们就可以去 ping 一下

因为我们使用的域名是:https://api.weixin.qq.com/cgi-bin/stable_token

所以 ping 的话,就要这样:

这样就知道该域名的 IP 地址了!

现在!我们就可以按照上面的步骤进行添加域名解析了

1. 进入容器

winpty docker exec -it 容器ID bash

"容器ID" 换成自己的 容器ID,或者容器名称 就可以了

winpty,这条命令,是因为我是在 windows 环境里进入容器,所以需要用到

2.找到 hosts 文件

cd /etc

cat hosts

先进入到 etc 目录

打印 hosts 文件内容

3.添加域名解析

vim hosts

编辑 hosts 文件,然后将下面这条添加到最后一行即可

121.14.23.85    api.weixin.qq.com

扩展:如果没有安装 vi 或者 vim,无法使用编辑,则可以使用下面这样处理

echo '121.14.23.85    api.weixin.qq.com' >> hosts

再查看一下内容,只要包含就可以了

cat hosts
127.0.0.1       localhost
::1     localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.26.0.2      264a7fee7843
121.14.23.85    api.weixin.qq.com

能看到,最后一行就加上去了

然后我们不需要重启容器,返回程序直接发起请求就可以了


2023年8月21日

新的一周,因为重启了容器,所以配置重置了,我按照上面的方式重新处理了一遍,结果发现还是会出现 "cURL error 6: Could not resolve host"

原因有两个:

  1. api.weixin.qq.com 的 IP 地址会变动
  2. 需要增加 DNS 地址

先说第一个,腾讯 那边还是很严谨厉害的, IP 是动态的,上周 ping 的时候是 121.14.23.85

今天我 ping 的时候却是:119.147.6.237,并且早上 两个小时前,我 ping 的地址还是另外一个~~

所以这样的方法,我们不能作为稳定使用,因为这意味着,变动一次 IP 我们就要去加入一次 IP地址,那太难受了,并且如此的话,我们发布后 线上也容易出现问题!

所以,我们就要使用第二个方案,增加 DNS 地址

nameserver 119.29.29.29
 
nameserver 8.8.8.8

我们可以在 "resolv.conf" 文件后面,追加这两行

119.29.29.29 代表是 腾讯 DNS 地址

8.8.8.8 代表是 Google DNS 地址

然后我们再来实验。

先看一下添加到文件内容后:

能看到文件内容,最后两行是有我们新加入的内容,那么我们再请求一下 "https://api.weixin.qq.com/cgi-bin/stable_token" 这个地址试试能不能成功!

好的 成功了!

以上是我这边请求接口(请求我自己写的程序)时,再请求 "https://api.weixin.qq.com/cgi-bin/stable_token" 成功后 输出的内容!

就是返回的 "稳定版接口调用凭据"

额外的知识点!!!

上面有说不能重启,是因为我们重启容器后,我们修改的 "/etc/hosts" 文件则又会重置,所以就等于 白改

为什么重启后修改内容不存在了

原因是:每次 docker 在启动容器的时候,通过重新构建新的 /etc/hosts 文件,这又是为什么呢?原因是:容器重启,IP 地址为改变,hosts 文件中原来的 IP 地址无效,因此理应修改 hosts 文件,否则会产生脏数据

有没有什么好的解决方法?

可以通过 docker run 命令的 –add-host 参数来为容器添加 host 与 ip 的映射关系

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/83785.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

函数性能探测:更简单高效的 Serverless 规格选型方案

作者:拂衣、丛霄 2019 年 Berkeley 预测 Serverless 将取代 Serverful 计算成为云计算新范式。Serverless 为应用开发提供了一种全新系统架构。借助 2023 年由 OpenAI 所带来的 AIGC 风潮,以阿里云函数计算 FC、AWS Lambda 为代表的 Serverless 以其更高…

Flink的常用算子以及实例

1.map 特性&#xff1a;接收一个数据&#xff0c;经过处理之后&#xff0c;就返回一个数据 1.1. 源码分析 我们来看看map的源码 map需要接收一个MapFunction<T,R>的对象&#xff0c;其中泛型T表示传入的数据类型&#xff0c;R表示经过处理之后输出的数据类型我们继续往…

在ARM服务器上一键安装Proxmox VE(以在Oracle Cloud VPS上为例)(甲骨文)

前言 如题&#xff0c;具体用到的说明文档如下 virt.spiritlhl.net 具体流程 首先是按照说明&#xff0c;先得看看自己的服务器符不符合安装 Proxmox VE的条件 https://virt.spiritlhl.net/guide/pve_precheck.html#%E5%90%84%E7%A7%8D%E8%A6%81%E6%B1%82 有提到硬件和软…

Redis缓存问题(穿透, 击穿, 雪崩, 污染, 一致性)

目录 1.什么是Redis缓存问题&#xff1f; 2.缓存穿透 3.缓存击穿 4.缓存雪崩 5.缓存污染&#xff08;或满了&#xff09; 5.1 最大缓存设置多大 5.2 缓存淘汰策略 6.数据库和缓存一致性 6.1 4种相关模式 6.2 方案&#xff1a;队列重试机制 6.3 方案&#xff1a;异步更新缓…

基于YOLOV8模型的西红柿目标检测系统(PyTorch+Pyside6+YOLOv8模型)

摘要&#xff1a;基于YOLOV8模型的西红柿目标检测系统可用于日常生活中检测与定位西红柿目标&#xff0c;利用深度学习算法可实现图片、视频、摄像头等方式的目标检测&#xff0c;另外本系统还支持图片、视频等格式的结果可视化与结果导出。本系统采用YOLOv8目标检测算法训练数…

day20 飞机大战射击游戏

有飞行物类 飞行 爆炸 的连环画&#xff0c; 飞行的背景图 &#xff0c; 子弹图&#xff0c; 还有游戏开始 暂停 结束 的画面图。 设计一个飞机大战的小游戏&#xff0c; 玩家用鼠标操作hero飞行机&#xff0c; 射出子弹杀死敌机&#xff0c;小蜜蜂。 敌机可以获得分数&…

浅谈java自定义中类两个对象的比较

目录 实现比较两个对象是否相同 1.前置代码 1.学生类 2.示例 3.输出 4.原因 2.那么我们要怎么做呢? 1.对Student类中重新实现quals方法(即对equals方法重写) 2.完整代码如下: 3.具体操作 4.演示 1.示例 2.输出 3.原因 实现比较两个对象的大小 第一种: 用…

Android 9.0 Vold挂载流程解析(下)

Android 9.0 Vold挂载流程解析&#xff08;上&#xff09; 前言 上一篇介绍了Android 文件系统中Vold挂载机制的总体框架&#xff0c;我们分析了vod进程的main.cpp.接下来我们分析下存储卡挂载和卸载的流程。 存储卡挂载 在上篇文章文章提到&#xff0c;监听驱动层挂载和卸…

【是C++,不是C艹】 手把手带你实现Date类(附源码)

&#x1f49e;&#x1f49e;欢迎来到 Claffic 的博客&#x1f49e;&#x1f49e; &#x1f449; 专栏&#xff1a;《是C&#xff0c;不是C艹》&#x1f448; 前言&#xff1a; 恍惚间&#xff0c;已经两个月没更新了 &#xff08;&#xff1b;д&#xff40;&#xff09;ゞ 我忏…

听GPT 讲Alertmanager源代码--dispatch/silence/inhibit等

目前Alertmanager项目共计53M大小&#xff0c;其中.git占了46M&#xff0c;总的go代码行数不足6万行(包括.pb.go等文件)&#xff0c;不算是一个大项目。 但实现了告警的分发&#xff0c;静默等功能&#xff0c;值的研究&#xff0c;尤其是dispatch中的route部分。 在Prometheus…

2022年03月 C/C++(三级)真题解析#中国电子学会#全国青少年软件编程等级考试

第1题&#xff1a;和数 给定一个正整数序列&#xff0c;判断其中有多少个数&#xff0c;等于数列中其他两个数的和。 比如&#xff0c;对于数列1 2 3 4, 这个问题的答案就是2, 因为3 2 1, 4 1 3。 时间限制&#xff1a;10000 内存限制&#xff1a;65536 输入 共两行&#x…

图数据库_Neo4j学习cypher语言_使用CQL_构建明星关系图谱_导入明星数据_导入明星关系数据_创建明星关系---Neo4j图数据库工作笔记0009

首先找到明星数据 可以看到有一个sheet1,是,记录了所有的关系的数据 然后比如我们搜索一个撒贝宁,可以看到撒贝宁的数据 然后这个是构建的CQL语句 首先我们先去启动服务 neo4j console 然后我们再来看一下以前导入的,可以看到导入很简单, 就是上面有CQL 看一下节点的属性

验证二叉搜索树

给你一个二叉树的根节点 root &#xff0c;判断其是否是一个有效的二叉搜索树。 有效 二叉搜索树定义如下&#xff1a; 节点的左子树只包含 小于 当前节点的数。节点的右子树只包含 大于 当前节点的数。 所有左子树和右子树自身必须也是二叉搜索树。 示例 1&#xff1a; 输…

关于lattice planner

使用编程创建驾驶场景。 1.使用Driving scenario Designer 交互方式创建驾驶场景 2.导出matalb function 3.修正这个函数&#xff0c;创建原始场景的变体。 4.调用这个函数&#xff0c;生成drivingScenario object。 5.在simulink中仿真&#xff0c;导入这个objcet &…

探索线程池的威力:优化多线程任务管理与性能提升

比喻举例&#xff08;可以比作工人队伍&#xff09; 想象一下&#xff0c;如果我们需要完成很多工作&#xff0c;我们可以招募一群工人来协助。然而&#xff0c;如果每个工人都是临时招募的&#xff0c;工作完成后就解雇他们&#xff0c;那么每次都要花时间和精力来招募和解雇工…

蓝桥杯上岸每日N题 (闯关)

大家好 我是寸铁 希望这篇题解对你有用&#xff0c;麻烦动动手指点个赞或关注&#xff0c;感谢您的关注 不清楚蓝桥杯考什么的点点下方&#x1f447; 考点秘籍 想背纯享模版的伙伴们点点下方&#x1f447; 蓝桥杯省一你一定不能错过的模板大全(第一期) 蓝桥杯省一你一定不…

使用VisualStudio制作上位机(一)

文章目录 使用VisualStudio制作上位机(一)写在前面第一部分:创建应用程序第二部分:GUI主界面设计使用VisualStudio制作上位机(一) Author:YAL 写在前面 1.达到什么目的呢 本文主要讲怎么通过Visual Studio 制作上位机,全文会以制作过程来介绍怎么做,不会去讲解具体…

【Java】常见面试题:HTTP/HTTPS、Servlet、Cookie、Linux和JVM

文章目录 1. 抓包工具&#xff08;了解&#xff09;2. 【经典面试题】GET和POST的区别&#xff1a;3. URL中不是也有这个服务器主机的IP和端口吗&#xff0c;为啥还要搞个Host&#xff1f;4. 补充5. HTTP响应状态码6. 总结HTTPS工作过程&#xff08;经典面试题&#xff09;7. H…

最长回文子序列——力扣516

动态规划 int longestPalindromeSubseq(string s){int n=s.length();vector<vector<int>>

11. Docker Swarm(二)

1、前言 上一篇中我们利用Docker Swarm搭建了基础的集群环境。那么今天我们就来验证以下该集群的可用性。上一篇的示例中&#xff0c;我创建了3个实例副本&#xff0c;并且通过访问http://192.168.74.132:8080得到我们的页面。 2、验证高可用 1&#xff09;我们可以通过以下命…