【docker】docker compose使用,已nginx为例

1、配置国内源

1.1 问题描述

在使用docker时,默认情况下会报超时,比如:

复制代码
Error response from daemon: failed to resolve reference

或者

复制代码
 read: connection reset by peer

原因是需要从国外网络下载镜像;

而且从 2024 年 6 月起,大量国内公共镜像加速器相继停止服务;

因此,在使用docker下载镜像前,配置、测试国内源

1.2 处理方法

1)添加国内源

编辑 /etc/docker/daemon.json 文件,如果没有则创建;

向 registry-mirrors 字段中添加国内源地址;

常用的国内源如下:

注意:部分云厂商的加速地址(如阿里云、腾讯云)可能限制在对应云平台的内网中使用

daemon.json 示例如下,适用于NVIDIA Orin系列平台

bash 复制代码
{
    "registry-mirrors": [
        "https://docker.xuanyuan.me",
        "https://docker.m.daocloud.io"
    ],

    "runtimes": {
        "nvidia": {
            "args": [],
            "path": "nvidia-container-runtime"
        }
    },
    "ipv6": false
}

2)重启docker来生效

复制代码
sudo systemctl daemon-reload
sudo systemctl restart docker

3)测试国内源是否配置成功

bash 复制代码
docker info | grep -A5 "Registry Mirrors"
 Registry Mirrors:
  https://docker.xuanyuan.me/
  https://docker.m.daocloud.io/
  https://docker.1ms.run/

4)如果还是报错,逐一测试国内源是否有效,例如

复制代码
docker pull docker.m.daocloud.io/library/nginx:1.27-alpine

如果出现类似

复制代码
failed to copy: read tcp 192.168.1.110:60160->172.67.135.145:443: read: connection reset by peer

问题,需要换一个源继续测试

成功会打印类似如下的日志

bash 复制代码
Digest: sha256:65645c7bb6a0661892a8b03b89d0743208a18dd2f3f17a54ef4b76fb8e2f2a10
Status: Downloaded newer image for docker.m.daocloud.io/library/nginx:1.27-alpine
docker.m.daocloud.io/library/nginx:1.27-alpine

5)查看下载的镜像

docker images

bash 复制代码
IMAGE                                            ID             DISK USAGE   CONTENT SIZE   EXTRA
docker.m.daocloud.io/library/nginx:1.27-alpine   65645c7bb6a0       76.8MB         22.7MB

2、Cloudflare 问题

2.1 问题描述

如果报错 read tcp xxx 172.67.135.145:443: read: connection reset by peer

建议更换源、或者多试几次。下面分析和IP 172.67.x.x、104.21.x.x 相关的问题

2.2 Cloudflare 简介

Cloudflare 是美国一家全球互联网基础设施公司,核心产品是:CDN、DDoS 防护、DNS,全球几百个边缘节点,几千万网站都挂在它上面。

Cloudflare的工作原理是什么?

用户访问网站,先连接 Cloudflare 就近节点(CDN),如果有缓存,直接返回,如果没有缓存,Cloudflare 节点再去请求网站原始服务器。

Cloudflare的作用是什么?

很多网站不直接暴露自己真实服务器 IP,把流量交给 Cloudflare 的全球节点中转、缓存、防攻击。

  • CDN 加速:静态文件缓存到全球各地节点,访问更快
  • DDoS 防护:攻击流量先打到 CF 庞大的边缘网络,不会直接打垮源站
  • 隐藏真实服务器 IP,增加安全性

很多国内公共 Docker 镜像加速器(比如前面配置的 docker.m.daocloud.io)前端都套了 Cloudflare CDN(为什么要套Cloudflare,不是为了加速吗?)

2.3 怎么判读是Cloudflare的IP

1)可以从官网上查看,https://www.cloudflare.com/ips/

IPv4

bash 复制代码
173.245.48.0/20
103.21.244.0/22
103.22.200.0/22
103.31.4.0/22
141.101.64.0/18
108.162.192.0/18
190.93.240.0/20
188.114.96.0/20
197.234.240.0/22
198.41.128.0/17
162.158.0.0/15
104.16.0.0/13
104.24.0.0/14
172.64.0.0/13
131.0.72.0/22

IPv6

bash 复制代码
2400:cb00::/32
2606:4700::/32
2803:f800::/32
2405:b500::/32
2405:8100::/32
2a06:98c0::/29
2c0f:f248::/32

2)使用命令查看,常用命令

curl ipconfig.io/json?ip=172.67.135.145

bash 复制代码
{
  "ip": "172.67.135.145",
  "ip_decimal": 2890106769,
  "country": "United States",
  "country_iso": "US",
  "country_eu": false,
  "asn": "AS13335",
  "asn_org": "Cloudflare, Inc.",
  "user_agent": {
    "product": "curl",
    "version": "7.81.0",
    "raw_value": "curl/7.81.0"
  }

3、安装docker镜像

1)配置 docker-compose.yml

yaml 复制代码
services:
  nginx:
    image: nginx:1.27-alpine
    container_name: nginx
    restart: unless-stopped
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./logs:/var/log/nginx
    environment:
      - TZ=Asia/Shanghai

2)下载镜像

复制代码
docker compose up

3)失败处理

如果 docker compose up 下载失败;

可以尝试使用 docker pull 命令直接下载

复制代码
docker pull docker.m.daocloud.io/library/nginx:1.27-alpine

下载成功后,修改 docker-compose.yml 中的 image 字段

yaml 复制代码
services:
  nginx:
    image: docker.m.daocloud.io/library/nginx:1.27-alpine
    container_name: nginx
    restart: unless-stopped
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./logs:/var/log/nginx
    environment:
      - TZ=Asia/Shanghai

然后在尝试使用 docker compose up

4、国内 Docker 加速器为什么关停

1)安全监管

容器镜像里面可以打包任意程序、脚本、工具,镜像内容很难实时全自动审计

2)消耗流量巨大

Docker 镜像体积巨大,镜像要持续同步 Docker Hub 海量仓库,同步消耗大量资源,带宽成本持续暴涨

3)Docker Hub 侧本身的访问限制

Docker 官方对匿名用户做拉取频率限流:匿名 IP 每 6 小时只能拉固定次数镜像。

4)云厂商商业策略调整

云厂商的免费公共镜像加速器,原本是引流福利:

目前只能在云服务器内网中使用,不对外开发;

总之,免费的使用越来越困难,建议使用合法、付费的。

相关推荐
zzu123zsw1 小时前
从 proxy_pass 末尾斜杠到 WebAssembly 预压缩:深挖 Nginx 生产环境四大高频踩坑点
运维·nginx·wasm·webassembly·devops·运维排错
郝亚军2 小时前
RK3562 中有 mosquitto、nginx 了,还需要 http,ftp,tftp 等协议吗?
运维·nginx·http
a5986522 小时前
Docker云手机端口不通,无法访问|六边云手机教你故障排查完整流程
docker·容器·性能优化·云手机
杰克尼3 小时前
Kubernetes
云原生·容器·kubernetes
ab1237684 小时前
Docker Compose 完整详解
运维·docker·容器
吴声子夜歌4 小时前
Docker入门与实战——容器实战思考
docker·容器
江湖有缘4 小时前
Docker实战 | 使用Docker部署Foxel私有云盘服务
docker·容器·eureka
吴声子夜歌4 小时前
Docker入门与实战——核心实现技术
运维·docker·容器
死磕音视频4 小时前
n8n 自动化入门:用 Docker 在本机部署 n8n 并搭建第一个 AI 工作流
docker·ai应用·n8n·工作流自动化