docker-代理
区分3种场景
- 拉取镜像时的代理
- 深入到容器内部的应用的代理
- docker build 时的代理
一、镜像拉取代理
因为镜像的拉取和管理都是 docker daemon 进行的, 所以需要配置和重启 daemon
- 方法一: 镜像站模式 /etc/docker/daemon.json
{
"registry-mirrors": ["https://docker.1ms.run"]
}使用方式:
docker image pull mysql:5.7.40- 方法二: 镜像站模式-直连
docker pull docker.1ms.run/library/mysql:5.7.40一些镜像站列表
https://tools.opsnote.top/registry-mirrors/
便捷脚本
#!/bin/bash
# pull_proxy_docker_images.sh
# 语法: pull_proxy_docker_images.sh mysql:5.7.40
image_name=$1
proxy_addr='docker.1ms.run'
proxy_image=${proxy_addr}/library/$image_name
# 判断镜像名是否包含 '/'
if [[ "$image_name" == */* ]]; then
proxy_image=${proxy_addr}/$image_name
else
proxy_image=${proxy_addr}/library/$image_name
fi
docker pull ${proxy_image}
docker tag ${proxy_image} ${image_name}
docker rmi ${proxy_image}- 方法三: socks5代理
# /usr/lib/systemd/system/docker.service
#or
# /etc/systemd/system/docker.service.d/http-proxy.conf
[Service]
# 指定目标地址
Environment="HTTP_PROXY=http://127.0.0.1:15777"
Environment="HTTPS_PROXY=http://127.0.0.1:15777"
Environment="NO_PROXY=localhost,127.0.0.1,192.168.5.0/24,docker-registry.example.com"systemctl daemon-reload
systemctl restart docker
systemctl show --property=Environment docker- 方法四: vpn透明代理
修改网关至 vpn 节点
二、容器内部的应用代理
~/.docker/config.json
支持参数: httpProxy,httpsProxy,ftpProxy,noProxy,allProxy
{
"proxies":
{
// 针对所有启动的容器
"default":
{
"httpProxy": "http://10.2.1.2:8118",
"httpsProxy": "http://10.2.1.2:8118",
"noProxy": "*.test.example.com,.example2.com,127.0.0.0/8,10.10.1.232"
},
// 针对某个容器的高优先级配置
"tcp://docker-daemon1.example.com": {
"noProxy": "*.internal.example.net"
}
}
}命令行启动时针对单个容器
docker run --env HTTP_PROXY="http://proxy.example.com:3128" redis三、构建镜像时的代理
即 docker build 时
构建时使用 --build-arg 标志, 而在运行容器时使用 --env 标志来配置代理
注意构建镜像时如果使用环境变量设置代理会将配置嵌入到镜像中
docker build \
--build-arg HTTP_PROXY="http://proxy.example.com:3128" \
--build-arg HTTPS_PROXY="https://proxy.example.com:3129" .最后更新于