Docker 配置网络代理

2023-05-16

有时因为网络原因,比如公司 NAT,或其它啥的,需要使用代理。Docker 的代理配置,略显复杂,因为有三种场景。但基本原理都是一致的,都是利用 Linux 的 http_proxy 等环境变量。

Dockerd 代理

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

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

在这个proxy.conf文件(可以是任意*.conf的形式)中,添加以下内容:

[Service]
Environment="HTTP_PROXY=http://proxy.example.com:8080/"
Environment="HTTPS_PROXY=http://proxy.example.com:8080/"
Environment="NO_PROXY=localhost,127.0.0.1,.example.com"

其中,proxy.example.com:8080 要换成可用的免密代理。通常使用 cntlm 在本机自建免密代理,去对接公司的代理。可参考《Linux下安装配置Cntlm 代理》。

重启docker daemon
sudo systemctl daemon-reload
sudo systemctl restart docker

systemctl show --property=Environment docker

/etc/systemd/system/docker.service.d

Container 代理

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

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

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

此外,容器的网络代理,也可以直接在其运行时通过 -e 注入 http_proxy 等环境变量。这两种方法分别适合不同场景。config.json 非常方便,默认在所有配置修改后启动的容器生效,适合个人开发环境。在CI/CD的自动构建环境、或者实际上线运行的环境中,这种方法就不太合适,用 -e 注入这种显式配置会更好,减轻对构建、部署环境的依赖。当然,在这些环境中,最好用良好的设计避免配置代理上网。

Docker Build 代理

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

docker build . \
    --build-arg "HTTP_PROXY=http://proxy.example.com:8080/" \
    --build-arg "HTTPS_PROXY=http://proxy.example.com:8080/" \
    --build-arg "NO_PROXY=localhost,127.0.0.1,.example.com" \
    -t your/image:tag

注意:无论是 docker run 还是 docker build,默认是网络隔绝的。如果代理使用的是 localhost:3128 这类,则会无效。这类仅限本地的代理,必须加上 --network host 才能正常使用。而一般则需要配置代理的外部IP,而且代理本身要开启 Gateway 模式。
重启生效

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

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

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

sudo systemctl daemon-reload
sudo systemctl restart docker

参考

Control Docker with systemd | Docker Documentation
Configure Docker to use a proxy server | Docker Documentation
Use the Docker command line | Docker Documentation

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Docker 配置网络代理 的相关文章

随机推荐

  • 使用auto-gpt来写一篇技术文章(如何部署autogpt+遇到的问题+如何使用)

    文章目录 前言一 autogpt本地部署1 clone代码2 启动虚拟环境3 运行项目 二 使用aotogpt生成文章1 人设描述2 设置目标3 文章的生成过程4 文章的生成内容 总结 前言 最近AI技术的发展非常迅猛 xff0c 尤其是和
  • 如何使用bingChat(使用方法+遇到的问题+感受)

    文章目录 前言一 如何使用Bing Chat1 下载new Bing2 重新注册一个microsoft xff08 此步骤可略过 xff0c 如有问题再操作此步骤 xff09 3 使用 Bing Chat 二 常见问题1 Chat mode
  • MapReduce编程模型

    如图所示 xff0c 上图就是mapreduce的编程模型 MapReduce的流程分为5个阶段 xff1a 输入文件 gt Map gt 中间文件 gt Reduce阶段 gt 输出文件 步骤1 启动子进程 xff1a 用户程序会启动两类
  • 安装mysql8.0 https://dl.bintray.com/ 网址被禁用问题

    安装mysql8 0下载不了https dl bintray com 的文件 需要自己下载boost 1 70 0 tar gz文件 xff0c 亲测可用 链接 xff1a https pan baidu com s 1qyeQ6Qfexg
  • keil5仿真相关配置,解决相关bug

    一 keil5仿真时 xff0c 添加动态数值至观察窗口 xff08 watch X xff09 xff0c 但是值不变化或提示错误 原因分析 xff1a 1 1 未将观察的变量配置为全局变量 xff0c 需要将观察的变量配置为全局变量 x
  • 查看vs支持的c#语言版本/查看.NetCore版本/更改c#语言版本

    1 查看vs支持的c 版本 注意语言版本控制 官网解释 Windows 10 选择 开始 键盘上的 Windows 徽标键 并滚动到字母 V 展开 Visual Studio 2019 文件夹 选择 VS 2019 开发人员命令提示 xff
  • Yum项目上线实战(网站运维)

    项目上线 一 编译安装与卸载Nginx二 关于LAMP三 LAMP环境部署 一 编译安装与卸载Nginx Nginx xff1a 是一款比较流行的web服务器软件 xff0c 类似于Apache 1 安装nginx 下载nginx ngin
  • elment ui 全部报错,参数不能赋给类型“App<any> ,怀疑是插件更新的原因

    elment组件全部报错 xff0c 的参数不能赋给类型 App lt any gt amp xff0c 有一样的情况的吗 xff0c 目前怀疑是插件更新的原因
  • mybatis-plus-boot-starter 引用不了包BaseMapper

    我的解决办法是 xff1a 调整版本号到3 2 0 lt dependency gt lt groupId gt com baomidou lt groupId gt lt artifactId gt mybatis plus boot s
  • Unrecognized option: --Xmx5120m

    Container exited with a non zero exit code 1 Error file prelaunch err Last 4096 bytes of prelaunch err Last 4096 bytes o
  • 廖雪峰Python教程之mapreduce

    1 map 函数 map 函数接收两个参数 xff0c 一个是函数 xff0c 一个是Iterable xff0c map将传入的函数依次作用到序列的每个元素 xff0c 并把结果作为新的Iterator返回 def f x return
  • 正则基础知识

    正则 RegExp xff1a 由相关元字符和修饰符组成的一个规则 xff0c 匹配 验证和捕获 xff08 只用来处理字符串 xff09 可以理解为两个斜杠中间包含一些内容就是正则 元字符 xff1a 元字符 两个斜杠之间包起来的内容 正
  • The packaging for this project did not assign a file to the build artifact 问题解决

    1 问题出现场景 新建一个Java工程 xff0c 添加testng依赖文件 xff0c 准备使用mvn install安装testng工具时 xff0c 点击如下图1 xff0c 发生以下报错信息图2 xff0c The packagin
  • vscode连接服务器免密码登录

    在windows环境下 xff0c 有时候需要用到linux平台开发 xff0c 如果用Ubuntu虚拟机的话 xff0c 用起来很不习惯 xff0c 不方便切换到windows界面 xff0c 可以把代码放到服务器上 xff0c 用vs
  • kubectl安装无法连接packages.cloud.google.com

    1 问题描述 Err 4 https packages cloud google com apt kubernetes xenial InRelease Could not connect to packages cloud google
  • Centos8-stream安装PostgreSQL13

    一 安装postgresql13 server yum span class token function install span y https download postgresql org pub repos yum reporpm
  • ttf文件结构解析

    TrueType字体通常包含在单个TrueType字体文件中 xff0c 其文件后缀为 TTF OpenType字体是以类似 于TrueType字体的格式编码的POSTSCRIPT字体 OPENTYPE字体使用 OTF文件后缀 OPENTY
  • centos卸载软件三种方式

    1 我们来卸载用yum安装的软件 xff1a yum remove 软件名字 xff1b 2 如果是用rpm包安装的软件呢 xff0c 则使用如图命令进行卸载 xff1b rpm e 软件名 xff1b 3 如果是用tar包安装的软件呢 x
  • Pycharm设置http代理

    1 Pycharm设置 2 urllib下载数据配置 span class token keyword from span urllib span class token punctuation span error span class
  • Docker 配置网络代理

    有时因为网络原因 xff0c 比如公司 NAT xff0c 或其它啥的 xff0c 需要使用代理 Docker 的代理配置 xff0c 略显复杂 xff0c 因为有三种场景 但基本原理都是一致的 xff0c 都是利用 Linux 的 htt