Docker配置Proxy

半兽人 发表于: 2025-07-15   最后更新时间: 2025-07-18 18:20:21  
{{totalSubscript}} 订阅, 1,942 游览
# Docker 代理配置指南 ## 一、临时代理设置(开发/测试时用) ### 命令行设置(仅当前终端有效): ```bash PROXY_URL="http://127.0.0.1:1087" export HTTP_PROXY=${PROXY_URL} export HTTPS_PROXY=${PROXY_URL} export NO_PROXY="localhost,127.0.0.1,docker.yourcompany.com" ``` ### 使用场景: * 临时测试代理是否可用; * 用于执行如 `curl`、`docker build` 等命令时; * 关闭终端或注销 shell 后失效。 ### 一、环境变量说明 #### 1. `HTTP_PROXY` / `HTTPS_PROXY` * **作用**:告诉各种网络工具(如 `curl`、`pip`、`apt`、`docker build` 等)在访问 **HTTP / HTTPS 网络时要通过指定的代理地址转发请求**。 * **格式**: * `http://ip:port` 例如:`http://127.0.0.1:1087` * 有用户名密码的写法:`http://username:password@proxy.example.com:8080` * **支持的协议**:通常是 HTTP 代理,也可能支持 SOCKS(如 `socks5://`,但支持情况有限) ##### 示例: ```bash export HTTP_PROXY=http://127.0.0.1:1087 export HTTPS_PROXY=http://127.0.0.1:1087 ``` #### 2. `NO_PROXY` * **作用**:告诉系统 “对这些地址**不要走代理**,直接访问”。 * **格式**:逗号分隔的一组域名/IP 或通配符 ##### 示例: ```bash export NO_PROXY="localhost,127.0.0.1,dockerhub.mycompany.com,.internal" ``` 上面的意思是: * `localhost` 和 `127.0.0.1`(本地回环地址)不会经过代理; * `dockerhub.mycompany.com` 是公司内网的镜像源,也不走代理; * `.internal` 代表所有结尾是 `.internal` 的域名(例如 `svc.internal`)都不走代理。 > **重点提示**: > 如果你不设 `NO_PROXY`,本地访问也会尝试走代理,容易导致访问失败或非常慢。 ## 二、全局持久配置(推荐用于开发机) ### 写入 `~/.bashrc` 或 `~/.zshrc`(取决于你用哪个 Shell): ```bash # ~/.bashrc 或 ~/.zshrc PROXY_URL="http://127.0.0.1:1087" export HTTP_PROXY=${PROXY_URL} export HTTPS_PROXY=${PROXY_URL} export NO_PROXY="localhost,127.0.0.1,dockerhub.yourcompany.com" ``` 保存后执行: ```bash source ~/.bashrc # 或 source ~/.zshrc ``` ### 使用场景: * 适用于所有命令行工具; * 所有新的 shell 会话都会继承; * 但**不会影响 Docker 守护进程后台拉镜像行为**。 ## 三、Docker Daemon(后台服务)配置代理 > **适用于 `docker pull`、`docker-compose up` 拉镜像等行为** ### 1. 创建配置目录: ```bash sudo mkdir -p /etc/systemd/system/docker.service.d ``` ### 2. 创建配置文件: ```bash sudo nano /etc/systemd/system/docker.service.d/http-proxy.conf ``` 内容如下(按需修改): ```ini [Service] Environment="HTTP_PROXY=http://127.0.0.1:1087" Environment="HTTPS_PROXY=http://127.0.0.1:1087" Environment="NO_PROXY=localhost,127.0.0.1,dockerhub.yourcompany.com" ``` ### 3. 重启 Docker: ```bash sudo systemctl daemon-reexec sudo systemctl daemon-reload sudo systemctl restart docker ``` ### 4. 验证是否生效: ```bash sudo systemctl show --property=Environment docker ``` ## 四、Docker 构建镜像(client)配置代理 ### 方式一:写入 `~/.docker/config.json` ```bash mkdir -p ~/.docker nano ~/.docker/config.json ``` 内容如下: ```json { "proxies": { "default": { "httpProxy": "http://127.0.0.1:1087", "httpsProxy": "http://127.0.0.1:1087", "noProxy": "localhost,127.0.0.1,dockerhub.yourcompany.com" } } } ``` 作用:会让 `docker build` 构建过程自动使用代理。 ### 方式二:Dockerfile 中设置 ENV(容器构建时用) ```Dockerfile FROM ubuntu:22.04 ENV HTTP_PROXY=http://127.0.0.1:1087 ENV HTTPS_PROXY=http://127.0.0.1:1087 ENV NO_PROXY=localhost,127.0.0.1 ``` ### 方式三:运行容器时临时传入 ```bash docker run \ -e HTTP_PROXY=http://127.0.0.1:1087 \ -e HTTPS_PROXY=http://127.0.0.1:1087 \ -e NO_PROXY=localhost,127.0.0.1 \ ubuntu:22.04 curl http://google.com ``` ## 总结表格 | 场景 | 配置方法 | 是否推荐 | | ---------------------- | --------------------------------------------- | ------ | | 临时测试代理 | `export HTTP_PROXY=...` | ✅ 开发调试 | | 永久生效(命令行工具) | `.bashrc` / `.zshrc` | ✅ 推荐 | | Docker 构建镜像时走代理 | `~/.docker/config.json` | ✅ 推荐 | | Docker 拉取镜像走代理(daemon) | `/etc/systemd/system/docker.service.d/*.conf` | ✅ 必须 | | Dockerfile 设置代理 | `ENV HTTP_PROXY=...` | ✅ 如需构建 | | 运行容器时传入代理 | `docker run -e HTTP_PROXY=...` | ✅ 临时使用 |
更新于 2025-07-18

查看docker更多相关的文章或提一个关于docker的问题,也可以与我们一起分享文章