转载请注明出处:饭饭博客:https://www.cnblogs.com/zzf0305/p/9602107.html

摘语:参考了N多大侠的资料,终于将自己的环境配置起来了。站在众多巨人的肩膀进行总结。

背景:公司的服务器为了安全,基本都是在内网中,只有有需要时才会开通一台外网机器。

目的:本文章将讲述,在开通一台外网机器的情况下,利用nginx做反向代理,使内网中的五台机器都可以上网,并将doker镜像下载下来。

附录:内网机器的安装配置脚本。写的比较简单粗暴。

#!/bin/bash

nei_addres=外网机器上可以连接内网机器的ip
nei_port=需要监听的端口号 echo "------------------------------------开始修改profile文件-------------------------" sed -i "/# will prevent the need for merging in future updates/a\ " /etc/profile
sed -i "/# will prevent the need for merging in future updates/a\export HTTP_PROXY HTTPS_PROXY http_proxy https_proxy" /etc/profile
sed -i "/# will prevent the need for merging in future updates/a\https_proxy=https://${nei_addres}:${nei_port}" /etc/profile
#sed -i "/# will prevent the need for merging in future updates/a\HTTPS_PROXY=https://${nei_addres}:${nei_port}" /etc/profile
#sed -i "/# will prevent the need for merging in future updates/a\HTTP_PROXY=http://${nei_addres}:${nei_port}" /etc/profile
sed -i "/# will prevent the need for merging in future updates/a\http_proxy=http://${nei_addres}:${nei_port}" /etc/profile
sed -i "/# will prevent the need for merging in future updates/a\ " /etc/profile #更新配置文件
source /etc/profile
cat /etc/profile yum -y install wget #--------注意:这里你可以填写自己的阿里云加速器或者是官方的加速器,由于都是个人注册的,所以我这里就删掉了。各位直接将自己的粘贴上来就行 #测试
echo "-----------------------------测试连接百度--------------------------------"
wget https://www.baidu.com #配置docker
echo "-----------------------------------开始配置docker--------------------------------------"
mkdir -p /etc/systemd/system/docker.service.d
echo "[Service]
Environment=\"http_proxy=http://${nei_addres}:${nei_port}\"" > /etc/systemd/system/docker.service.d/http-proxy.conf echo "[Service]
Environment=\"https_proxy=https://${nei_addres}:${nei_port}\"" > /etc/systemd/system/docker.service.d/https-proxy.conf echo "-----------------------------------更新docker状态------------------------------------"
systemctl stop docker
systemctl daemon-reload
systemctl start docker
systemctl status docker echo "------------------------------------尝试拉取镜像----------------------------"
echo "-------------------------------执行 完毕---------------------------------"

内网机器配置脚本

硬件情况:

(1)外网机器(简称:A),这台机器虽然是一台虚拟机,但是配置了两块网卡,一块是只能连接内网的网卡(网卡简称:A内),另一块是只能连接外网的网卡(网卡简称:A外);

(2)内网机器(简称:B),因为内网中的机器情况都一样,所以就以一台机器为例。虽然内网中的机器网卡数量不一样多,但是有一个共同的特性,就是都是只能在内网中联通。

注意:内网中的每一台机器都不要去配置DNS,否则后面docker请求镜像的下载时,会先用本机的DNS进行解析。但因为是内网机器,肯定解析不开。

  碰见最多的情况:在配置成功之后,还是拉取不下来镜像,nginx中的日志也正常,经排查主要是网速的问题,尝试更改网关,或者换个时间进行拉取镜像。

软件情况:

nginx:1.15

docker:18.06

centos 7.5

一、nginx的环境配置(外网机器上安装)

备注:因为nginx是我们技术大牛帮我安装的,据说专门编译了https的模块,但是我在后面的docker下载那儿没有使用到该模块。假如你在使用阿里云进行在线安装docker的话,可能会出现解析不到。如果出现此问题,请联系本人,发你模糊安装教程。哈哈

nginx只需要装在外网的这一台机器就行了,内网中的机器不需要进行安装。

nginx的安装请参考本人的这篇文章:

https://www.cnblogs.com/zzf0305/p/9320022.html

主要是nginx的配置:

  补充:如果只是需要docker上网,在/etc/profile的配置文件中不需要添加下面脚本里的配置,否则会使你的其他软件出现问题,使用http或者https时,会将请求发送到你代理的地方。

如果你是编译安装的,可以新建一个配置文件

[root@localhost home]# vi /usr/local/nginx/conf/proxy.conf

server {

     listen       8081;      #这里是配置的监听本机的8081端口,可随意更改

     # dns resolver used by forward proxying
resolver 8.8.8.8; #这里的dns是最重要的,我这里配置的是和我本机的外网的dns相同 sendfile on;
charset utf-8;
keepalive_timeout 65;
# forward proxy for CONNECT request
proxy_connect;
proxy_connect_allow 443 563;
proxy_connect_connect_timeout 10s;
proxy_connect_read_timeout 100s;
proxy_connect_send_timeout 100s; # forward proxy for non-CONNECT request
location / { proxy_pass http://$host; #这里是固定格式,不要进行更改
proxy_set_header Host $host; #这里也是固定格式,不要进行更改 #fan bu chong
proxy_redirect off;
#proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 65;
proxy_send_timeout 65;
proxy_read_timeout 65;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k; }
}

  

注意:上面配置文件中,除了注释的,其余的都是参考配置,可配置也可不配置

编译安装的需要在nginx的主配置文件中添加这个一句话:

[root@localhost home]# vi /usr/local/nginx/conf/nginx.conf

  因为我的此配置文件是默认的,就加了这么一个配置文件的语句,所以这里就不全部贴出了,只贴出修改过的部分:

前面部分省略

http {

    include       mime.types;
include proxy.conf; #一般此位置位于nginx.conf配置文件中第一个出现的http中,意思是将刚刚上面编写的proxy.conf配置文件包含进来。 后面部分省略

  

配置文件编写完成,然后你启动nginx就可以了。

二、在讲docker的环境配置之前,先将一下如何可以在内网中使用yum命令进行在线下载

  yum命令的在线下载,更加方便了我们接下来安装docker

  因为上面已经做了nginx的反向代理,所以我们只需要将内网中机器的请求转到外网机器即可。

[root@localhost home]# vi /etc/profile

在此配置文件中添加如下环境变量
http_proxy=http://A内的ip地址:上面nginx监听的地址(这里是8081)
#HTTP_PROXY=$http_proxy
#HTTPS_PROXY=https://A内的ip地址:上面nginx监听的地址(这里是8081)
https_proxy=https://A内的ip地址:上面nginx监听的地址(这里是8081)
export HTTP_PROXY HTTPS_PROXY http_proxy https_proxy

  记得更新环境变量

[root@localhost home]# source /etc/profile 

  测试一下httpd是否可以安装

[root@localhost home]# yum install httpd

  

三、docker的环境配置(内网中的5台机器都是一样的配置)

docker的安装请参考本人的这篇文章:

  https://www.cnblogs.com/zzf0305/p/9607699.html

安装完docker之后,需要做如下的配置(这是docker官方的解决方案,我这里是选取了适合 我的)

docker解析的是这儿的配置文件,而不是刚刚/etc/profile所配置的环境变量

mkdir /etc/systemd/system/docker.service.d

  

vi /etc/systemd/system/docker.service.d/http-proxy.conf

  [Service]

  Environment="http_proxy=http://A内的ip地址:上面nginx监听的地址(这里是8081)"

  备注:在脚本里,我还添加了https-proxy.conf的配置,可以借各位参考一下。我这里只要配置了这个就可以了。

重启docker即可

试试拉取镜像,你就会开心的发现可以使用了

四、总结

  1、理清楚整个流程。

  2、排查错误时:可以同时打开docker的日志和nginx的日志。

    如果只是在docker中产生日志,说明并没有映射到nginx上,需要在内网机器中本身找错误;

    如果docker和nginx中同时产生日志,但是还是不能拉取镜像,说明还是内网机器本机有问题。本人就碰见此现象,这时nginx中产生的日志还是16进制的,只能看懂最后的400数字。而在docker里面的报错是这样的:

      Error response from daemon: Get https://registry-1.docker.io/v2/: proxyconnect tcp: tls: oversized record received with length 20527

      两种猜测:(1)经排查是内网机器中配了DNS,将请求解析成16进制了,导致nginx代理不出去。报的返回的数据条数过多。

            (2)上面/etc/profile配置文件中采用的变量名,我一开始采用的大写的HTTP_PROXY这种模式,也有可能是大写的代理出错。

            (3)老规矩,偷个懒,留给各位去做情景重现。

  3、不要慌,晚上做就行,晚上脑袋清醒。哈哈。

五、此过程中解决的错误

  只记录了部分。根据以上教程,这些问题都将得到解决。

    下面这个报错基本就是网络的问题,可以尝试这样解决:    

      (1)给docker配置加速,阿里云加速、daodocker加速都可以

      (2)网关的问题。我遇见的就是网关的问题,早上10点以前只有偶尔的几次可以拉取成功,到了十点之后,成功率基本达到百分之90,尝试过的网关有8.8.8.8;8.8.4.4,机房管理员告诉的联通机房网关,成功率在我测试后都不高,最后采用了114.114.114.114这个网关。目前速度还可以。

  [root@localhost completions]# docker pull busybox

  Using default tag: latest

  Error response from daemon: Get https://registry-1.docker.io/v2/: dial tcp: lookup registry-1.docker.io on [::1]:53: read udp [::1]:36261->[::1]:53: read: connection refused

    

  

貌似主要就是这些问题,其余问题还算好解决。

(原创)nginx反向代理上网,使docker可以拉取镜像的更多相关文章

  1. IIS tomcat共用80端口解决一个IP多个域名:使用Nginx反向代理方式使两者兼容

    环境: windows server 2003,IIS6服务器,Tomcat7服务器 域名有几个: 以下是使用IIS的域名: http://www.formuch.com/ http://www.fo ...

  2. (转)IIS tomcat共用80端口解决一个IP多个域名:使用Nginx反向代理方式使两者兼容

    from :http://www.cnblogs.com/wuyou/p/3455619.html 环境: windows server 2003,IIS6服务器,Tomcat7服务器 域名有几个: ...

  3. 怎么解决docker pull拉取镜像速度过慢的问题

    在我们安装了docker之后,在利用docker pull下载镜像的时候,由于国内的源会出现的问题就是速度真的很慢,可以用龟速来形容,最痛苦的是当你耐心的等待几个小时之后,出现unexpected E ...

  4. 【Docker学习之三】Docker查找拉取镜像、启动容器、容器使用

    环境 docker-ce-19.03.1-3.el7.x86_64 CentOS 7 一.查找.拉取镜像.启动容器1.查找镜像-docker search默认查找Docker Hub上的镜像,举例:D ...

  5. [原创]Nginx反向代理及负载均衡

    1.基本命令 # 启动nginx start nginx.exe # windowsnginx -c /usr/local/nginx/conf/nginx.conf # Linux# 优雅的停止ng ...

  6. play-with-docker搭配ffsend完成文件上传及下载(解决从docker hub拉取镜像慢问题)

    由于众所周知的原因,大家有的时候pull docker hub上的镜像是很困难的,下载到99%就这么不动了也是很正常的事情 这个时候以下步骤是100%可以解决问题的: 1.找一台国外的服务器安装doc ...

  7. docker 查看拉取镜像源地址

    命令:  cat /etc/docker/de

  8. 【使用kubectl apply xxx.yaml的方式从docker源拉取镜像】

    只需要修改黄底色部分就可以了 apiVersion: apps/v1 # Kubernetes version 1.8.x should use apps/v1beta2 # Kubernetes v ...

  9. Nginx反向代理配置配置实例

    为了节省支出,公司需要将分布在不同机器的站点都迁移到一台机器,而目前不同机器运行的是不同的web服务,部分是nginx,部分是apache,由于牵涉较多rewrite规则,为了节省修改功夫,打算迁移后 ...

随机推荐

  1. DB2中SQL基本语句的操作

    完全转载自:http://blog.sina.com.cn/s/blog_67aaf4440100v01p.html --创建数据库 create database Etp; --连接数据库 conn ...

  2. 网络拓扑实例之VRRP负载分担(四)

    组网图形  VRRP负载分担简介 负载分担方式是指多台设备同时承担业务,因此负载分担方式需要两个或者两个以上的虚拟路由器,每个虚拟路由器都包括一个Master路由器和若干个Backup路由器,各虚拟路 ...

  3. 面试大厂必看!就凭借这份Java多线程和并发面试题,我拿到了字节和美团的offer!

    最近好多粉丝私信我说在最近的面试中老是被问到多线程和高并发的问题,又对这一块不是很了解,很简单就被面试官给问倒了,被问倒的后果当然就是被刷下去了,因为粉丝要求,我最近也是花了两天时间 给大家整理了这一 ...

  4. 循序渐进VUE+Element 前端应用开发(28)--- 附件内容的管理

    在我们很多模块里面,都需要使用到一些诸如图片.Excel文件.PDF文件等附件的管理,一般我们倾向于把它独立为一个公用的附件管理模块,这样可以有效的统一管理附件的信息.本篇随笔介绍附件内容的管理,包括 ...

  5. MathType总结编辑括号的类型(下)

    在数学中,所涉及到的公式总是会有各种各样的情况,对于括号这些都是最常见的了.在最开始的四则基本运算中我们学会了使用括号,而随着学习的不断深入,所涉及到的符号与公式都越来越多,对于括号的类型也是使用得非 ...

  6. vue 2.9.6升级到3X版本

    先通过 npm uninstall vue-cli -g 卸载vue,然后再安装,但是vue -V时依然是2.9.6版本: 第一步: npm config get registry 第二步: npm ...

  7. JDBC【2】-- JDBC工作原理以及简单封装

    目录 1. 工作原理 1.1 加载驱动 1.1.1 类加载相关知识 1.1.2 为什么JDK 1.6之后不需要显示加载了? 1.2 驱动加载完成了,然后呢? 2. 简单封装 1. 工作原理 一般我们主 ...

  8. mq消息消费,broker选址

    PullRequest.MessageQueue.BrokerName 根据PullRequest.MessageQueue得到brokerId,默认0或者用缓存中的suggest,每次消息拉取后会更 ...

  9. KNN 算法-理论篇-如何给电影进行分类

    公号:码农充电站pro 主页:https://codeshellme.github.io KNN 算法的全称是K-Nearest Neighbor,中文为K 近邻算法,它是基于距离的一种算法,简单有效 ...

  10. 转载的一篇文章eclipse添加插件

    eclipse没有(添加)"Dynamic Web Project"选项的方法 转载海边的第八只螃蟹 最后发布于2015-11-24 21:24:15 阅读数 40814  收藏 ...