前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Linux 系统代理魔法对 Docker 无效?

Linux 系统代理魔法对 Docker 无效?

作者头像
运维部落
发布2020-05-13 14:14:22
3.9K0
发布2020-05-13 14:14:22
举报
文章被收录于专栏:运维部落运维部落
  • 问题场景重现
    • 怀疑镜像慢拉取超时
    • 怀疑系统代理不生效
  • 问题分析
    • Docker 底层工作原理
    • 额外:CentOS 7系统引导过程

Linux 系统代理魔法对 Docker 无效?

  • 一句话回答问题:

Linux所谓的系统代理是针对系统使用者,通过SHELL转化用户请求为系统可识别,完成网络出口的系统转发。Docker基于C/S架构运行,Server端由Systemd维护管理,Clientdaemon方式运行,所有请求以API方式,通过SHELL环境,转由Server接收执行命令并返回结果给Client。因此,系统代理魔法对 Docker 无效。换句话讲,凡由非SHELL运行的服务,环境变量均无效。需在进程本身配置代码或其父进程systemdsysv配置生效。

希望深入了解请继续

问题场景重现

新部署的docker环境拉取镜像时总报错 registry-1.docker.io timeout

代码语言:javascript
复制
# docker run nginx
Unable to find image 'nginx:latest' locally
docker: Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers).

怀疑镜像慢拉取超时

尝试了如下办法依然没有解决:

  • 办法一:修改 /etc/docker/daemon.json
代码语言:javascript
复制
{
  "registry-mirrors": ["https://registry.docker-cn.com"]
}
  • 办法二:修改dns解析 /etc/resolv.conf
代码语言:javascript
复制
nameserver 114.114.114.114
nameserver 1.1.1.1
  • 办法三:修改 /etc/hosts
代码语言:javascript
复制
52.206.192.146 registry-1.docker.io
  • 热加载systemd,重启dockerd后仍不生效
代码语言:javascript
复制
# systemctl daemon-reload
# systemctl restart docker.service

无效

怀疑系统代理不生效

  • docker服务添加代理
代码语言:javascript
复制
/etc/systemd/system/docker.service.d/http-proxy.conf
[Service]
Environment=http_proxy=http://proxyip:8118 https_proxy=http://proxyip:8118
  • 热加载systemd,重启dockerd后镜像正常拉取
代码语言:javascript
复制
# systemctl daemon-reload
# systemctl restart docker.service

生效

问题是解决了,但原因很值得分析。考验的是大家对Linux系统理解的是否扎实。

问题分析

Docker 底层工作原理

Docker架构

如图为Docker的架构,需要关注的是:

  1. DockerC/S架构。即Server端是以Daemon方式运行在后台,Client无非Daemon
  2. Dockerd所有的操作都是由docker-cli发起,两者所有的交互由以API接口的方式通信
  3. Linux系统结构可知, docker-cli运行在shell环境下。

那么Dockerd服务进程也运行是shell环境下吗?显然不是的!

看下图可知, dockerd的父进程是systemd。其实不尽然,在系统引导结束后,systemd其实是所有服务的父进程 .

systemd

额外:CentOS 7系统引导过程

system start

从网上扒了一张图,具体启动流程这里不再赘述。有兴趣的朋友自行研究。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-04-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 运维部落 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Linux 系统代理魔法对 Docker 无效?
    • 问题场景重现
      • 怀疑镜像慢拉取超时
      • 怀疑系统代理不生效
    • 问题分析
      • Docker 底层工作原理
      • 额外:CentOS 7系统引导过程
相关产品与服务
容器镜像服务
容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档