Docker配置代理
Docker Pull配置代理
用docker拉取halohub/halo的时候特别慢,使用国内docker镜像也不行,可以通过设置代理来解决
在执行docker pull
时,是由守护进程dockerd
来执行。因此,代理需要配在dockerd
的环境中。而这个环境,则是受systemd
所管控,因此实际是systemd
的配置。
sudo cd /etc/systemd/system
sudo mkdir docker.service.d
sudo cd docker.service.d/
sudo vi proxy.conf
#######################################################
[Service]
Environment="HTTP_PROXY=http://xxx.xxx.xxx.xxx:1081/"
Environment="HTTPS_PROXY=http://xxx.xxx.xxx.xxx:1081/"
Environment="NO_PROXY=localhost,127.0.0.1,.example.com"
########################################################
sudo systemctl daemon-reload
sudo systemctl restart docker
此时,再拉取的时候,直接从docker官方拉取速度极快
Docker Build配置代理
自己制作镜像的时候,可能会用到国外的一些源,此时会非常慢,例如下面制作writefreely镜像的时候,用到了npm源,就会很慢
对此,我们有两种解决方法,第一种直接在Dockerfile中加入代理环境变量,第二种,构建时命令行注入代理参数
第一种:
FROM golang:1.15-alpine as build
ENV http_proxy "http://xxx.xxx.xxx.xxx:1081"
ENV HTTP_PROXY "http://xxx.xxx.xxx.xxx:1081"
ENV https_proxy "http://xxx.xxx.xxx.xxx:1081"
ENV HTTPS_PROXY "http://xxx.xxx.xxx.xxx:1081"
RUN apk add --update nodejs npm make g++ git
RUN npm install -g less less-plugin-clean-css
RUN mkdir -p /go/src/github.com/writefreely/writefreely
WORKDIR /go/src/github.com/writefreely/writefreely
COPY . .
ENV GO111MODULE=on
第二种:
docker build . \
--build-arg "HTTP_PROXY=http://xxx.xxx.xxx.xxx:1081/" \
--build-arg "HTTPS_PROXY=http://xxx.xxx.xxx.xxx:1081/" \
--build-arg "NO_PROXY=localhost,127.0.0.1,.example.com" \
-t your/image:tag
第三种:
RUN npm install -g less less-plugin-clean-css
# 修改为
RUN npm --registry https://registry.npm.taobao.org install -g less less-plugin-clean-css
Docker Container配置代理
Docker Container本质上就是启动了一个Linux系统,这个Linux系统要上网,也是需要配置代理,可以docker exec登陆,也可以在构建在时候就注入代理
第一种,配置当前用户docker配置文件:
cd ~/.docker
vi config.json
{
"proxies":
{
"default":
{
"httpProxy": "http://xxx.xxx.xxx.xxx:1081",
"httpsProxy": "http://xxx.xxx.xxx.xxx:1081",
"noProxy": "localhost,127.0.0.1,.example.com"
}
}
}
配置完之后,之后用此用户启动的任何容器都会使用代理。
第二种:
在docker run命令中,使用-e http_proxy和https_proxy注入,这个只对本次开启的容器有效。
docker run -d --env HTTP_PROXY="$proxy_url" --env HTTPS_PROXY="$proxy_url" --env no_proxy="*.aliyundrive.com" --network=host -v /etc/xiaoya:/data --restart=always --name=xiaoya xiaoyaliu/alist:hostmode