起因
我在使用Docker的pull
命令拉取ELK官方提供的鏡像時(shí),會(huì)出現(xiàn)無法連接的情況,并且會(huì)出現(xiàn)TLS handshake timeout
的錯(cuò)誤。在搜索相關(guān)文章之后得出結(jié)論:國內(nèi)的網(wǎng)絡(luò)環(huán)境不好,導(dǎo)致連接docker.elastic.co
失敗或無法連接。于是我第一時(shí)間想到了代理的方式,好在Docker支持設(shè)置代理來訪問其他Registry,下面記錄整個(gè)配置過程。
準(zhǔn)備工作
首先,你的機(jī)器上需要安裝好Docker,當(dāng)我寫這篇文章時(shí),Docker的版本為18.03,對(duì)于后續(xù)版本,本文章的配置方法可能會(huì)失效。
此外,還需要準(zhǔn)備一個(gè)代理服務(wù)器,可以正常訪問境外網(wǎng)站(如:Google,YouTuBe等)。我用的是VPS搭建的Shadowsocks代理,本機(jī)Shadowsocks客戶端開啟之后可以直接通過http://127.0.0.1:1080/訪問境外網(wǎng)站。
假設(shè)你的環(huán)境也是Ubuntu(其他環(huán)境應(yīng)該也是類似的)。
開始配置
1、創(chuàng)建如下路徑的目錄
sudo mkdir -p /etc/systemd/system/docker.service.d
2、進(jìn)入到上一步創(chuàng)建的目錄下,并在該目錄下創(chuàng)建一個(gè)名為http-proxy.conf的文件(如:/etc/systemd/system/docker.service.d/http-proxy.conf),使用vim編輯文件內(nèi)容如下
[Service]
Environment="HTTPS_PROXY=http://127.0.0.1:1080/" "NO_PROXY=localhost,127.0.0.1,registry.docker-cn.com,hub-mirror.c.163.com"
3、刷新配置
sudo systemctl daemon-reload
4、重啟Docker服務(wù)
sudo systemctl restart docker
5、查看配置
systemctl show --property=Environment docker
出現(xiàn)如下信息表示配置成功:
Environment=HTTPS_PROXY=http://127.0.0.1:1080/ NO_PROXY=localhost,127.0.0.1,registry.docker-cn.com,hub-mirror.c.163.com
6、驗(yàn)證配置是否生效
重新從docker.elastic.co上拉取elasticsearch鏡像,此時(shí)已經(jīng)可以正常連接了,只是速度較慢。
liuwei@liuwei-Ubuntu:~$ sudo docker pull docker.elastic.co/elasticsearch/elasticsearch:6.2.4
6.2.4: Pulling from elasticsearch/elasticsearch
469cfcc7a4b3: Downloading [==========================> ] 38.87MB/73.17MB
8e27facfa9e0: Downloading [===================================> ] 40.05MB/56.33MB
cdd15392adc7: Download complete
ddcc70fbd933: Downloading [====================> ] 44.31MB/108.9MB
3d3fa0383994: Waiting
15d1376ebd55: Waiting
這種方法適用于從一些第三方提供的Registry上拉取鏡像時(shí),由于網(wǎng)絡(luò)原因無法連接。如果從Docker官方的鏡像倉庫中拉取鏡像時(shí),一種比較好的辦法就是配置registry-mirrors實(shí)現(xiàn)加速,具體方法請(qǐng)自行搜索。
上述步驟是來自Docker官方文檔中的部分,原文地址為Control Docker with systemd。
如果你在配置過程遇到問題,歡迎在留言討論。
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。