配置Docker CLI使用代理服务器
编辑
17
2025-04-03
本文介绍如何通过容器环境变量为Docker CLI配置代理设置。
注意事项
本文不涉及Docker Desktop的代理配置,相关说明请参考"为Docker Desktop配置HTTP/HTTPS代理"
如果您在没有Docker Desktop的情况下运行Docker Engine,请参考"配置Docker守护进程使用代理服务器"来为dockerd配置代理
容器代理配置方式
当容器需要使用HTTP、HTTPS或FTP代理服务器时,可以通过多种方式进行配置:
1. 配置Docker客户端
可以在~/.docker/config.json
文件中添加代理配置,格式如下:
{
"proxies": {
"default": {
"httpProxy": "http://代理服务器地址:3128",
"httpsProxy": "https://代理服务器地址:3129",
"noProxy": "*.测试域名.com,.example.org,127.0.0.0/8"
}
}
}
⚠️ 安全警告:
代理设置可能包含敏感信息(如认证信息、内部网络地址等)
环境变量会以明文形式存储在容器配置中,可能通过远程API或被提交到镜像中
配置参数说明
这些设置仅用于配置容器的代理环境变量,不适用于Docker CLI或Docker Engine本身的代理设置。
2. 运行容器时的代理配置
基于上述配置启动容器时,会自动设置相关环境变量:
docker run --rm alpine sh -c 'env | grep -i _PROXY'
3. 构建时的代理配置
执行构建时,代理相关的构建参数会自动预填充:
docker build \
--no-cache \
--progress=plain \
- <<EOF
FROM alpine
RUN env | grep -i _PROXY
EOF
4. 为不同守护进程配置代理
可以为特定的守护进程配置单独的代理设置:
{
"proxies": {
"default": {
"httpProxy": "http://默认代理:3128",
"httpsProxy": "https://默认代理:3129"
},
"tcp://特定守护进程地址": {
"noProxy": "*.内部域名.net"
}
}
}
5. 通过CLI命令行设置代理
可以在执行命令时直接指定代理设置:
# 构建时使用代理
docker build --build-arg HTTP_PROXY="http://代理地址:3128" .
# 运行容器时使用代理
docker run --env HTTP_PROXY="http://代理地址:3128" redis
重要建议
❌ 不要在Dockerfile中使用ENV指令设置代理
✅ 应该使用构建参数(build-arg)来配置代理
原因:
使用环境变量会将代理配置嵌入到镜像中
如果代理是内部代理,基于该镜像创建的容器可能无法访问
代理设置可能包含敏感信息,嵌入镜像存在安全风险
- 1
- 0
-
分享