場(chǎng)景:
微信小程序 獲取 用戶?openpid,在此之前,我需要先 "獲取穩(wěn)定版接口調(diào)用憑據(jù)",根據(jù)手冊(cè)提示的,要先調(diào)用
https://api.weixin.qq.com/cgi-bin/stable_token
我這邊就開始了請(qǐng)求,結(jié)果返回了:
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
就很頭疼,因?yàn)橹拔沂亲鲞^這塊的,基本上沒有問題,沒遇到過這個(gè)。
好在,第一時(shí)間我就想到原因了,環(huán)境不同!
以前是沒有使用 docker 的,本次是使用的 docker 開發(fā),然后我去查閱,很幸運(yùn)網(wǎng)上都有針對(duì)這個(gè)問題的解答,并且也標(biāo)注確實(shí)是因?yàn)?docker 才發(fā)生這個(gè)問題的!
先說明一下,發(fā)生的原因:
原因分析:
Docker 容器無法解析局域網(wǎng)內(nèi)的域名,就算本地主機(jī)的 hosts 配置了域名映射也是不行的
Docker 環(huán)境不同于 wamp 或者 Xampp,對(duì)于局域網(wǎng)內(nèi)的域名解析,Docker 需要到 docker 內(nèi)部配置 hosts 文件
解決步驟:
進(jìn)入 docker 容器后,在 docker 文件中,配置域名解析;
1. docker exec -it 容器ID /bin/bash
2. vim /etc/hosts
3. 添加域名解析規(guī)則
解決思路明白了,這里面還有一點(diǎn)是未知的,就是第三步,"域名解析"
我們可以先看一下 hosts 文件里面的內(nèi)容:
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
可以看到其中的一個(gè)
127.0.0.1 ? ? ? localhost
而我們也需要添加我們需要的域名,但是 IP 地址是多少呢?
這時(shí)候我們就可以去 ping 一下
因?yàn)槲覀兪褂玫挠蛎牵?strong>https://api.weixin.qq.com/cgi-bin/stable_token
所以 ping 的話,就要這樣:
這樣就知道該域名的 IP 地址了!
現(xiàn)在!我們就可以按照上面的步驟進(jìn)行添加域名解析了
1. 進(jìn)入容器
winpty docker exec -it 容器ID bash
"容器ID" 換成自己的 容器ID,或者容器名稱 就可以了
winpty,這條命令,是因?yàn)槲沂窃?windows 環(huán)境里進(jìn)入容器,所以需要用到
2.找到 hosts 文件
cd /etc
cat hosts
先進(jìn)入到 etc 目錄
打印 hosts 文件內(nèi)容
3.添加域名解析
vim hosts
編輯 hosts 文件,然后將下面這條添加到最后一行即可
121.14.23.85? ? api.weixin.qq.com
擴(kuò)展:如果沒有安裝 vi 或者 vim,無法使用編輯,則可以使用下面這樣處理
echo '121.14.23.85?? ?api.weixin.qq.com' >> hosts
再查看一下內(nèi)容,只要包含就可以了
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
能看到,最后一行就加上去了
然后我們不需要重啟容器,返回程序直接發(fā)起請(qǐng)求就可以了
2023年8月21日
新的一周,因?yàn)橹貑⒘巳萜鳎耘渲弥刂昧?,我按照上面的方式重新處理了一遍,結(jié)果發(fā)現(xiàn)還是會(huì)出現(xiàn) "cURL error 6: Could not resolve host"
原因有兩個(gè):
- api.weixin.qq.com 的 IP 地址會(huì)變動(dòng)
- 需要增加 DNS 地址
先說第一個(gè),騰訊 那邊還是很嚴(yán)謹(jǐn)厲害的, IP?是動(dòng)態(tài)的,上周 ping 的時(shí)候是?121.14.23.85
今天我 ping 的時(shí)候卻是:119.147.6.237,并且早上 兩個(gè)小時(shí)前,我 ping 的地址還是另外一個(gè)~~
所以這樣的方法,我們不能作為穩(wěn)定使用,因?yàn)檫@意味著,變動(dòng)一次 IP 我們就要去加入一次 IP地址,那太難受了,并且如此的話,我們發(fā)布后 線上也容易出現(xiàn)問題!
所以,我們就要使用第二個(gè)方案,增加 DNS 地址
nameserver 119.29.29.29
nameserver 8.8.8.8
我們可以在 "resolv.conf" 文件后面,追加這兩行
119.29.29.29 代表是?騰訊 DNS 地址
8.8.8.8 代表是?Google DNS 地址
然后我們?cè)賮韺?shí)驗(yàn)。
先看一下添加到文件內(nèi)容后:
能看到文件內(nèi)容,最后兩行是有我們新加入的內(nèi)容,那么我們?cè)僬?qǐng)求一下 "https://api.weixin.qq.com/cgi-bin/stable_token" 這個(gè)地址試試能不能成功!
好的 成功了!
以上是我這邊請(qǐng)求接口(請(qǐng)求我自己寫的程序)時(shí),再請(qǐng)求 "https://api.weixin.qq.com/cgi-bin/stable_token" 成功后 輸出的內(nèi)容!
就是返回的 "穩(wěn)定版接口調(diào)用憑據(jù)"
額外的知識(shí)點(diǎn)!??!
上面有說不能重啟,是因?yàn)槲覀冎貑⑷萜骱?,我們修改?"/etc/hosts" 文件則又會(huì)重置,所以就等于 白改!
為什么重啟后修改內(nèi)容不存在了
原因是:每次 docker 在啟動(dòng)容器的時(shí)候,通過重新構(gòu)建新的 /etc/hosts 文件,這又是為什么呢?原因是:容器重啟,IP 地址為改變,hosts 文件中原來的 IP 地址無效,因此理應(yīng)修改 hosts 文件,否則會(huì)產(chǎn)生臟數(shù)據(jù)文章來源:http://www.zghlxwxcb.cn/news/detail-756252.html
有沒有什么好的解決方法?
可以通過 docker run 命令的 –add-host 參數(shù)來為容器添加 host 與 ip 的映射關(guān)系文章來源地址http://www.zghlxwxcb.cn/news/detail-756252.html
到了這里,關(guān)于docker cURL error 6: Could not resolve host的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!