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源,就会很慢

image-20230304194555358

对此,我们有两种解决方法,第一种直接在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

参考:如何优雅的给 Docker 配置网络代理

posted @ 2023-03-04 20:18  monkey6  阅读(3227)  评论(0编辑  收藏  举报