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 的话,就要这样:

docker cURL error 6: Could not resolve host_第1张图片 

这样就知道该域名的 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

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

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

你可能感兴趣的:(docker)