為 Docker 設置代理

因為眾所周知的原因,Docker在國內的使用舉步維艱。于是,很多組織在國內提供了mirror或者叫加速器。
甚至在1.13的release note中提到微軟提供了官方的中國鏡像,然后我并沒有找到怎么啟用,找到了再寫。

使用這些鏡像或者加速器,拉取各種官方鏡像是ok了,自有的鏡像也可以放在國內的registry。
但是官方鏡像只是滄海一粟,大量的組織或個人的鏡像都在docker hub,這一部分并沒有被鏡像同步。
于是,你還是需要一個代理。

本文假設:

  • 你已經有一個http代理了
  • Linux發(fā)行版的服務管理器使用的是systemd
  • 本文寫于 Version 17.03.0-ce , 在 Docker 1.13 和 17.03 上是可以的,不排除將來有所改變

順帶說一句,Windows版的在 Settings 的圖形界面上直接可以設置代理。

關于systemd

很多人可能對systemd還不熟悉,但主流發(fā)行版已經全都切換成systemd了,還是很有必要了解一下。

# 重啟docker
$ sudo systemctl restart docker
# 對應的舊的命令,其實現(xiàn)在還是支持,效果和上一句一樣。
$ sudo service docker restart
# 設置開機啟動
$ sudo systemctl enable docker

systemd是由文件夾/lib/systemd/system中的docker.service文件定義的。
我們隨便搜索一下systemd教程,就知道怎么樣自己編寫一個service文件了。
于是你可能躍躍欲試,把這個文件改一改,代理加進去就好了嘛。

等等,不要著急,如果你自己在做一個自己的服務,當然是要自己直接寫這個文件了。但是,我們的docker是從官方源安裝的。
這意味著你現(xiàn)在改了這個文件雖然會生效,但是docker一升級,這個文件又被覆蓋了呢。針對這個問題,systemd當然也有解決方案。

你其實只需要創(chuàng)造一個叫 <something>.conf 的配置文件,名字隨便起,放在
/etc/systemd/system/docker.service.d 目錄。你就覆蓋了默認的啟動配置,并且它會作為你的用戶配置一直存在。

HTTP proxy

好了,現(xiàn)在我們可以開始加代理配置了。

  1. 默認情況下這個配置文件夾并不存在,我們要創(chuàng)建它。

    $ mkdir -p /etc/systemd/system/docker.service.d
    
  2. 創(chuàng)建一個文件 /etc/systemd/system/docker.service.d/http-proxy.conf
    包含 HTTP_PROXY 環(huán)境變量:

    [Service]
    Environment="HTTP_PROXY=http://proxy.example.com:80/"
    
  3. 如果有局域網或者國內的registry,我們還需要使用 NO_PROXY 變量聲明一下,比如你可以能國內的daocloud.io放有鏡像:

    [Service]
    Environment="HTTP_PROXY=http://proxy.example.com:80/" "NO_PROXY=localhost,127.0.0.1,daocloud.io"
    
  4. 刷新systemd配置:

    $ sudo systemctl daemon-reload
    
  5. 用系統(tǒng)命令驗證環(huán)境變量加上去沒:

    $ systemctl show --property=Environment docker
    Environment=HTTP_PROXY=http://proxy.example.com:80/
    
  6. 萬事俱備,重啟docker,在外面的世界遨游吧:

    $ sudo systemctl restart docker
    

ps. 本文只是對官方文檔的翻譯和簡化,希望大家還是學會活用google,檢索官方文檔,比看博客更有時效性。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容