【Docker】Linux-Centos中docker如何配置代理服务器拉取镜像
在 CentOS 中,如果需要代理来访问 Docker Hub 或其他镜像仓库,可以通过 配置 Docker 的代理 来加速拉取镜像。以下是详细步骤:
📌 方法 1:为 Docker Daemon 配置代理
在执行docker pull
时,是由守护进程dockerd来执行。因此,代理需要配在dockerd的环境中。而这个环境,则是受systemd所管控,因此实际是systemd的配置。需要在 Docker 守护进程(daemon) 配置代理。
1️⃣ 创建或修改 Docker 配置文件
在 CentOS 服务器上,编辑或创建 /etc/systemd/system/docker.service.d/http-proxy.conf
:
sudo mkdir -p /etc/systemd/system/docker.service.d
sudo vi /etc/systemd/system/docker.service.d/http-proxy.conf
2️⃣ 添加代理配置
[Service]
Environment="HTTP_PROXY=http://代理服务器IP:端口/"
Environment="HTTPS_PROXY=http://代理服务器IP:端口/"
Environment="NO_PROXY=localhost,127.0.0.1"
例如,如果代理服务器地址是 192.168.1.100:8080,配置如下:
[Service]
Environment="HTTP_PROXY=http://192.168.1.100:8080/"
Environment="HTTPS_PROXY=http://192.168.1.100:8080/"
Environment="NO_PROXY=localhost,127.0.0.1"
3️⃣ 重新加载并重启 Docker
sudo systemctl daemon-reload
sudo systemctl restart docker
4️⃣ 验证代理是否生效
运行以下命令查看 Docker 进程是否正确加载了代理:
systemctl show --property=Environment docker
如果输出中包含 HTTP_PROXY
和 HTTPS_PROXY
相关信息,则说明代理配置成功。
📌 方法 2:为 容器 配置代理
在容器运行阶段,如果需要代理上网,则需要配置~/.docker/config.json
。
1️⃣ 编辑 Docker 配置文件
mkdir -p ~/.docker
nano ~/.docker/config.json
2️⃣ 添加代理配置
{
"proxies": {
"default": {
"httpProxy": "http://192.168.1.100:8080",
"httpsProxy": "http://192.168.1.100:8080",
"noProxy": "localhost,127.0.0.1"
}
}
}
将 "http://192.168.1.100:8080"
替换为正确的代理服务器地址。
这个是用户级的配置,除了 proxies,docker login 等相关信息也会在其中。而且还可以配置信息展示的格式、插件参数等。
此外,容器的网络代理,也可以直接在其运行时通过 -e 注入 http_proxy 等环境变量。这两种方法分别适合不同场景。config.json 配置非常方便,默认在所有配置修改后启动的容器生效,适合个人开发环境。
📌 方法 3:为 Docker Compose 配置代理
如果使用 Docker Compose 运行容器,并希望某些容器使用代理,可以在 docker-compose.yml
文件中添加环境变量:
version: '3'
services:
myservice:
image: ubuntu
environment:
- HTTP_PROXY=http://192.168.1.100:8080
- HTTPS_PROXY=http://192.168.1.100:8080
- NO_PROXY=localhost,127.0.0.1
然后重新启动服务:
docker-compose up -d
📌 代理配置的常见问题
1️⃣ 代理服务器需要身份验证怎么办?
如果代理服务器需要用户名和密码,可以这样设置:
[Service]
Environment="HTTP_PROXY=http://username:password@192.168.1.100:8080/"
Environment="HTTPS_PROXY=http://username:password@192.168.1.100:8080/"
2️⃣ Docker 容器内部无法使用代理怎么办?
可以在 docker run
时手动传递:
docker run -e HTTP_PROXY=http://192.168.1.100:8080 -e HTTPS_PROXY=http://192.168.1.100:8080 -it ubuntu bash
3️⃣ 代理导致 Docker Hub 访问受限怎么办?
如果在使用 Docker Hub下载太慢,建议配置 镜像加速,可以在 /etc/docker/daemon.json
中添加:
{
"registry-mirrors": ["https://registry.docker-cn.com"]
}
然后重启 Docker:
sudo systemctl restart docker
📌 总结
需求 | 解决方案 |
---|---|
Docker Daemon 代理 | 配置 /etc/systemd/system/docker.service.d/http-proxy.conf |
Docker 容器 代理 | 配置 ~/.docker/config.json |
Docker Compose 代理 | docker-compose.yml 中 environment 变量 |
仅某个容器使用代理 | docker run -e HTTP_PROXY=... |
Docker Hub 访问慢 | 配置 registry-mirrors |