Docker配置网络代理

Docker配置网络代理

大部分时候,我们在使用docker时可能由于网络原因(比如公司NAT、镜像拉取)需要通过配置代理来解决问题。Docker的代理稍微复杂一点,要分三个场景,基本原理都是通过系统代理(http_proxy环境变量)来实现。

对于拉取镜像困难的小伙伴来说配置代理是个不错的选择,特别是在目前国内各大docker镜像加速暂停服务的时期。

一、Dockerd代理

在执行docker pull命令时,是由守护进程dockerd来执行的。因此,代理需要配置在dockerd环境中。而这个环境是有systemd管控,所以实际上是systemd的配置。

sudo mkdir -p /etc/systemd/system/docker.service.d
sudo vim /etc/systemd/system/docker.service.d/proxy.conf

proxy.conf文件中配置一下内容:

[service]
Environment="HTTP_PROXY=http://proxyip:proxy_port"
Environment="HTTPS_PROXY=http://proxy_ip:proxy_port"
Environment="NO_PROXY=localhost,127.0.0.1,.xxxx.com"

其中proxy_ip:proxy_port换成自己的代理服务器地址(免密)。

检查代理设置

如果你的计算机连接到互联网时需要通过代理服务器,那么你需要确保Docker也配置了相应的代理设置。你可以使用以下命令来检查Docker的代理设置:

systemctl show --property=Environment docker

该命令将显示Docker服务的环境变量设置。你需要查找其中的HTTP_PROXYHTTPS_PROXY设置,并确保它们正确配置为你的代理服务器地址和端口。如果没有设置代理,或者设置错误,你可以使用以下命令来修改它们:

sudo systemctl edit docker

这将打开一个文本编辑器,在其中你可以添加或修改Environment行以设置正确的代理地址和端口。修改后保存文件并退出编辑器,然后重启Docker服务以使更改生效。

二、Container代理

在容器运行阶段,如果容器的服务需要使用代理访问网络,则需要配置~/.docker/config.json。以下配置,只在Docker 17.07及以上版本生效。

{
    "proxies":{
        "default":{
            "httpProxy":"http://proxy:port",
            "httpsProxy":"http://proxy:port",
            "noProxy":"localhost,127.0.0.1,example.com"
        }
    }
}

这个是用户级的配置,除了proxies,docker login等相关信息也会在其中。还可以配置信息展示的格式、插件参数等。

此外,容器的网络代理,也可以直接在其运行时通过-e注入http_proxy等环境变量。

三、Docker Build代理

docker build的本质,也是启动一个容器。但是环境略有不同,用户级配置无效。在构建时需要注入http_proxy等参数。

docker build . \ 
    --build-arg "HTTP_PROXY=http://proxy:port" \
    --build-arg "HTTPS_PROXY=http://proxy:port" \
    --build-arg "NO_PROXY=localhost,127.0.0.1,.xxxx.com" \
    -t xxxx/image_name:tag

注意:无论是docker run还是docker build,默认是网络隔绝的。如果代理使用的是localhost:8888这类则会无效。这类访问的本地的代理,必须加上--network host设置网络模式为host

四、配置完成

代理配置完成后,reboot 重启当然可以生效,但不重启也行。

docker build 代理是在执行前设置的,所以修改后,下次执行立即生效。Container 代理的修改也是立即生效的,但是只针对以后启动的 Container,对已经启动的 Container 无效。

dockerd 代理的修改比较特殊,它实际上是改 systemd 的配置,因此需要重载 systemd 并重启 dockerd 才能生效。

sudo systemctl daemon-reload
sudo systemctl restart docker
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇