5

docker被墙了,docker又可以了...,经历了几次被折腾了,我决定彻底在团队内部解决这一问题。

在使用该方案前,配置过代理,也设置过阿里云的仓库源,但效果都不太理想,最终打造了内部的仓库镜像,完美的解决团队在拉取docker镜像时遇到的问题。

前提

预实现当前功能,需要满足以下前提:

  1. 有可用的代理
  2. 有个docker环境的主机

基础实现

在这直接给docker-compose.yml文件:

services:
  registry:
    image: registry:2
    container_name: registry
    environment:
      - HTTP_PROXY=http://192.168.20.3:7890
      - HTTPS_PROXY=http://192.168.20.3:7890
    ports:
      - "5000:5000"
    volumes:
      - /var/lib/registry:/var/lib/registry
      - /etc/docker/registry:/etc/docker/registry

其中:

  1. http://192.168.20.3:7890 修改为你本地的代理值
  2. 本地创建 /var/lib/registry 用于存储docker镜像
  3. 本地创建/etc/docker/registry,并在/etc/docker/registry下创建config.yml,内容如下:
version: 0.1
log:
  fields:
    service: registry
storage:
  cache:
    blobdescriptor: inmemory
  filesystem:
    rootdirectory: /var/lib/registry
http:
  addr: :5000
  headers:
    X-Content-Type-Options: [nosniff]
proxy:
  remoteurl: https://registry-1.docker.io
health:
  storagedriver:
    enabled: true
    interval: 10s
    threshold: 3

启动服务

首次使用docker compose up -d启动,非首次使用docker compose start启动.

使用镜像

最后在需要使用局域网仓库的计算机上编辑:/etc/docker/daemon.json,内容如下:

{
  "registry-mirrors": ["http://192.168.11.6:5000"]
}
  1. 192.168.11.6 换成运行docker镜像服务的IP地址即可。

编辑文件后,重启docker(debian下重启命令为: sudo systemctl daemon-reload,
sudo systemctl restart docker),则最后在执行docker pull时,便走局域网仓库了。


潘杰
3.1k 声望238 粉丝