Docker配置HTTP/HTTPS代理的方法

起因

我在使用Docker的pull命令拉取ELK官方提供的镜像时,会出现无法连接的情况,并且会出现TLS handshake timeout的错误。在搜索相关文章之后得出结论:国内的网络环境不好,导致连接docker.elastic.co失败或无法连接。于是我第一时间想到了代理的方式,好在Docker支持设置代理来访问其他Registry,下面记录整个配置过程。

准备工作

首先,你的机器上需要安装好Docker,当我写这篇文章时,Docker的版本为18.03,对于后续版本,本文章的配置方法可能会失效。

此外,还需要准备一个代理服务器,可以正常访问境外网站(如:Google,YouTuBe等)。我用的是VPS搭建的Shadowsocks代理,本机Shadowsocks客户端开启之后可以直接通过http://127.0.0.1:1080/访问境外网站。

假设你的环境也是Ubuntu(其他环境应该也是类似的)。

开始配置

1、创建如下路径的目录

sudo mkdir -p /etc/systemd/system/docker.service.d

2、进入到上一步创建的目录下,并在该目录下创建一个名为http-proxy.conf的文件(如:/etc/systemd/system/docker.service.d/http-proxy.conf),使用vim编辑文件内容如下

[Service]
Environment="HTTPS_PROXY=http://127.0.0.1:1080/" "NO_PROXY=localhost,127.0.0.1,registry.docker-cn.com,hub-mirror.c.163.com"

3、刷新配置

sudo systemctl daemon-reload

4、重启Docker服务

sudo systemctl restart docker

5、查看配置

systemctl show --property=Environment docker

出现如下信息表示配置成功:

Environment=HTTPS_PROXY=http://127.0.0.1:1080/ NO_PROXY=localhost,127.0.0.1,registry.docker-cn.com,hub-mirror.c.163.com

6、验证配置是否生效

重新从docker.elastic.co上拉取elasticsearch镜像,此时已经可以正常连接了,只是速度较慢。

liuwei@liuwei-Ubuntu:~$ sudo docker pull docker.elastic.co/elasticsearch/elasticsearch:6.2.4
6.2.4: Pulling from elasticsearch/elasticsearch
469cfcc7a4b3: Downloading [==========================>                        ]  38.87MB/73.17MB
8e27facfa9e0: Downloading [===================================>               ]  40.05MB/56.33MB
cdd15392adc7: Download complete
ddcc70fbd933: Downloading [====================>                              ]  44.31MB/108.9MB
3d3fa0383994: Waiting
15d1376ebd55: Waiting

这种方法适用于从一些第三方提供的Registry上拉取镜像时,由于网络原因无法连接。如果从Docker官方的镜像仓库中拉取镜像时,一种比较好的办法就是配置registry-mirrors实现加速,具体方法请自行搜索。

上述步骤是来自Docker官方文档中的部分,原文地址为Control Docker with systemd。

如果你在配置过程遇到问题,欢迎在留言讨论。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Linux下使用docker搭建Openvpn代理的方法

    说明 openvpn方式与pptpd方式对比(个人感觉): 复杂度:openvpn>pptpd 安全性:openvpn>pptpd 稳定性:openvpn>pptpd 1.安装 1.下载 docker pull kylemanna/openvpn 2.全局变量(方便设置) OVPN_DATA="/root/ovpn-data" // 下面的全局变量换成你的服务器的外网ip IP="xxx.xxx.xxx.xxx" 3.创建文件目录 mkdir ${

  • 如何利用Docker容器实现代理转发与数据备份详解

    前言 我们将应用以Docker容器的方式部署到服务器上的时候,通常需要考虑两个方面的的问题:网络和存储. 网络方面,有些应用需要占用端口,而其中一部分应用甚至需要对外提供访问. 出于安全方面考虑,代理转发方式相对于直接开放防火墙端口方式更为合适. 存储方面,由于容器内部并不适合做数据持久化,所以一般通过挂载卷的方式将数据保存在服务器磁盘上. 但是服务器也不能保证绝对安全,所以数据也需要备份到云上. 代理转发 默认情况下容器之间的网络是互相隔离的,但是对于一些有关联的应用而言(web前端容器和服务

  • 详解为 Docker 设置代理

    因为众所周知的原因,Docker在国内的使用举步维艰.于是,很多组织在国内提供了mirror或者叫加速器. 甚至在1.13的release note中提到微软提供了官方的中国镜像,然后我并没有找到怎么启用,找到了再写. 使用这些镜像或者加速器,拉取各种官方镜像是ok了,自有的镜像也可以放在国内的registry. 但是官方镜像只是沧海一粟,大量的组织或个人的镜像都在docker hub,这一部分并没有被镜像同步. 于是,你还是需要一个代理. 本文假设: 你已经有一个http代理了 Linux发行

  • Ubuntu 16.04中Docker的安装和代理配置教程

    前言 最近想在测试环境下快速搭建一套gitlab ci环境,推进下项目组内规范化开发管理.自己在家里的nas上是用docker部署的gitlab,体验非常的好,正好ubuntu 16.04 lts发布了,也想借此机会接触下新版内核和systemd. Ubuntu的安装 这里就省略不介绍了.唯一的问题是当前版本的官方镜像,选中文在安装阶段会报一个busybox的错误,换成英文就好了. 大家也可以参考这篇文章:http://www.jb51.net/article/100919.htm,里面介绍的也

  • 利用python自动生成docker nginx反向代理配置

    利用python自动生成docker nginx反向代理配置 由于在测试环境上用docker部署了多个应用,而且他们的端口有的相同,有的又不相同,数量也比较多,在使用jenkins发版本的时候,不好配置,于是想要写一个脚本,能在docker 容器创建.停止的时候,自动生成nginx反向代理,然后reload nginx 我的原则是尽量简单,轻量,内存占用少 目标很明确,只要能监听到docker的容器启动/停止事件,即可 网上查了一下可以用docker events来监听docker事件,试了一下

  • Docker设置代理的方法教程

    在一些实验环境,服务器没有直接连接万网的权限,需要通过网络代理:通常情况下将网络代理直接配置在/etc/envrionment./etc/profile之类的配置文件中,这对于大部分操作都是可行的.然而,docker命令却不能使用这些代理.最典型场景就是docker需要从外网pull镜像: 下面推荐一种方法,修改后会一直生效,该方法覆盖了默认的docker.service文件: 1.为docker服务创建一个内嵌的systemd目录 mkdir -p /etc/systemd/system/do

  • Docker网络代理设置详解

    背景 在一些实验室环境,服务器没有直接连接外网的权限,需要通过网络代理.我们通常会将网络代理直接配置在/etc/environment./etc/profile之类的配置文件中,这对于大部分操作都是可行的.然而,docker命令却使用不了这些代理. 比如docker pull时需要从外网下载镜像,就会出现如下错误: $ docker pull hello-world Unable to find image 'hello-world:latest' locally Pulling reposit

  • 详解Docker中容器的备份、恢复和迁移

    今天,我们将学习如何快速地对docker容器进行快捷备份.恢复和迁移.Docker是一个开源平台,用于自动化部署应用,以通过快捷的途径在称之为容器的轻量级软件层下打包.发布和运行这些应用.它使得应用平台独立,因为它扮演了 Linux上一个额外的操作系统级虚拟化的自动化抽象层.它通过其组件cgroups和命名空间利用Linux内核的资源分离特性,达到避免虚拟机开销的目的.它使得用于部署和扩展web应用.数据库和后端服务的大规模构建组件无需依赖于特定的堆栈或供应者. 所谓的容器,就是那些创建自Do

  • Docker配置HTTP/HTTPS代理的方法

    起因 我在使用Docker的pull命令拉取ELK官方提供的镜像时,会出现无法连接的情况,并且会出现TLS handshake timeout的错误.在搜索相关文章之后得出结论:国内的网络环境不好,导致连接docker.elastic.co失败或无法连接.于是我第一时间想到了代理的方式,好在Docker支持设置代理来访问其他Registry,下面记录整个配置过程. 准备工作 首先,你的机器上需要安装好Docker,当我写这篇文章时,Docker的版本为18.03,对于后续版本,本文章的配置方法可

  • 使用Docker配置redis sentinel哨兵的方法步骤

    目录 1.配置主从 2. 配置哨兵 3.SpringBoot连接 本文演示一主二从. 先说一下遇到的问题.我看网上说想配置哨兵,必须让启动redis的docker网络模式为host,否则无法访问到从还是什么的.我指定--network host后无法外网访问,redis desktop manager连不上redis了,后来发现我这个新克隆的机器没关防火墙,关上就好了. 1.配置主从 docker pull一下redis master mkdir -p /mydata/redis/6379/co

  • Docker配置redis哨兵模式的方法(多服务器上)

    前言 之前学习的redis一直是在单一服务器上运行的,而且是直接部署在服务器上.听说用docker会让配置过程更轻松 (并没有)这次就在用Docker的基础上配置Redis一主一从三哨兵.本篇为配置数据节点,即一主一从两个节点. 条件 三台服务器(因为需要至少三个哨兵保证安全性)[可以在阿里云上租几个小时] 服务器1:8.131.78.18 服务器2:8.131.69.106 服务器3:8.131.71.196 端口号7000.17000已在安全组上放行(阿里云) 环境:centos8.0 安装

  • Docker 配置容器固定IP的方法

    目录 前言 环境介绍 绑定步骤 跨主机容器互访 前言 之前使用pipework 分配静态ip是暂时的,重启之后就会失效,并且使用pipework绑定的ip 物理机,虚拟机,docker容器的ip都在同一网段,这在生产环境是很困难的,下面使用docker自带的network实现固定ip分配,并且重启不会消失. 环境介绍 绑定步骤 先操作192.168.1.105虚拟机 第一步:创建自定义网络 docker network create --subnet=172.172.0.0/24 docker-

  • docker安装nginx并配置通过https访问的方法

    1. 下载最新的nginx的docker image $ docker pull nginx:latest 2. 启动nginx容器 运行如下命令来启动nginx container docker run --detach \ --name wx-nginx \ -p 443:443\ -p 80:80 \ -v /home/evan/workspace/wxserver/nginx/data:/usr/share/nginx/html:rw\ -v /home/evan/workspace/w

  • 在Nginx服务器中配置mod_proxy反向代理的方法

    反向代理做法可以为网站安全做更高一步,像一些银行肯定是使用了反代理就是你进入代理服务器也得不到任何数据,下面我来介绍nginx用mod_proxy实现反向代理配置方法. 由于项目需要实现一个域名代理的功能 比如: 复制代码 代码如下: a.com/a.html=>b.com/b.html 也就是用a.com代理了所用b.com网站的请求,经过朋友介绍用apache的反向代理可以实现其目的,哥们试了一下,果然很爽.配置起来也超级的方便. (注意下面只介绍反向代理,正向代理等我用到了再介绍嘿嘿) 1

  • docker配置独立桥接IP的方法

    使用端口映射(NAT)的方式存在一个弊端,当多个容器都需要使用某个端口时或者host主机端口与容器端口冲突时(例如,host主机搭建了80的服务,两个容器也都搭建了80的服务,那个只有1个服务可以使用本机的80端口,其他服务都要映射为其他端口) 为容器配置独立的桥接IP就完美的解决了这个问题.以下为配置步骤: 1.可以查看默认的docker0网卡的IP: 可以看到,是一个虚拟的IP地址172.17.42.1. 接下来开始配置,首先停止docker服务: /etc/init.d/docker st

  • nginx使用ssl模块配置支持HTTPS访问的方法

    默认情况下ssl模块并未被安装,如果要使用该模块则需要在编译nginx时指定–with-http_ssl_module参数. 需求: 做一个网站域名为 www.localhost.cn 要求通过https://www.localhost.cn进行访问. 10.10.100.8 www.localhost.cn 实验步骤: 1.首先确保机器上安装了openssl和openssl-devel #yum install openssl #yum install openssl-devel 2.创建服务

  • nodejs中request库使用HTTPS代理的方法

    正在尝试改用NodeJS编写爬虫,http请求库选择了 request,用起来还是挺简单的. 现在有个需求,需要用Fiddler抓包我发出去的请求,以便和浏览器发出去的包进行对比. 因为需要解密HTTPS报文,需要让node要么忽略证书安全,要么信任Fiddler的CA证书. 网上找了一圈,总结如下: 方法一:设置环境变量 设置环境变量NODE_TLS_REJECT_UNAUTHORIZED=0 即"不拒绝未认证的证书" 但是直接修改系统环境变量比较危险,因为会影响到所有nodejs的

随机推荐