【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)云厂商商业策略调整

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

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

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

相关推荐
梅孔立1 小时前
Docker 容器网络不通:Tomcat 无法解析 MySQL、Nginx 无法反代 Tomcat 的生产级排查与治理
网络·docker·tomcat
螺蛳粉 螺蛳粉11 小时前
第 05 篇:etcd 深入:Raft 共识、watch 机制与快照备份恢复实战(底座认知 05)
docker·云原生·容器·kubernetes·etcd·分布式存储·kube-apiserver
PellyKoo14 小时前
【docker】cifs卷改smb密码后容器起不来的解决方法
运维·docker·容器
时早玖沐14 小时前
放弃 QQ 官方机器人:用 SnowLuma + AstrBot 自建 QQ 机器人
docker·开源·agent
阿标在干嘛15 小时前
容器编排的“场景适配”:我们为什么在部分服务中回归了Docker Compose?
运维·docker·容器
枫叶轻语17 小时前
【Nginx 从入门到实战 09】前后端统一入口:部署页面与接口的完整配置
nginx·全栈
无言听风雨丶18 小时前
Nginx 深度实战:从架构原理到生产排错
运维·nginx·架构
IT199518 小时前
Docker 快速部署 DM8 达梦数据库|完整踩坑笔记
笔记·docker·容器
wzg201619 小时前
ubuntu通过docker镜像部署安装onlyoffice
linux·ubuntu·docker
Star(up up up)19 小时前
Docker系列---Docker容器基本命令(新手小白保姆级实操教程)
运维·学习·程序人生·青少年编程·docker·容器·dubbo