Docker网络代理设置详解

背景

在一些实验室环境,服务器没有直接连接外网的权限,需要通过网络代理。我们通常会将网络代理直接配置在/etc/environment、/etc/profile之类的配置文件中,这对于大部分操作都是可行的。然而,docker命令却使用不了这些代理。

比如docker pull时需要从外网下载镜像,就会出现如下错误:

 $ docker pull hello-world

Unable to find image 'hello-world:latest' locally
Pulling repository docker.io/library/hello-world
docker: Network timed out while trying to connect to https://index.docker.io/v1/repositories/library/hello-world/images. You may want to check your internet connection or if you are behind a proxy..
See 'docker run --help'.

ps: 本文在Ubuntu16.04下测试通过。

解决方案一:

停止docker服务,手动以使用2375端口监听所有网络接口的方式启动docker daemon。

 $ systemctl stop docker.service
$ nohup docker daemon -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock & 

解决方案二:

编辑配置文件,Ubuntu下是/etc/default/docker,CentOS下是/etc/sysconfig/docker。不过通过修改这两个文件来配置daemon已经是discouraged的了。不鼓励使用这种方法。

 HTTP_PROXY="http://[proxy-addr]:[proxy-port]/"
HTTPS_PROXY="https://[proxy-addr]:[proxy-port]/"
export HTTP_PROXY HTTPS_PROXY 

解决方案三:

该方法是持久化的,修改后会一直生效。该方法覆盖了默认的docker.service文件。

1. 为docker服务创建一个内嵌的systemd目录

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

2. 创建/etc/systemd/system/docker.service.d/http-proxy.conf文件,并添加HTTP_PROXY环境变量。其中[proxy-addr]和[proxy-port]分别改成实际情况的代理地址和端口:

 [Service]
Environment="HTTP_PROXY=http://[proxy-addr]:[proxy-port]/" "HTTPS_PROXY=https://[proxy-addr]:[proxy-port]/" 

3. 如果还有内部的不需要使用代理来访问的Docker registries,那么嗨需要制定NO_PROXY环境变量:

 [Service]
Environment="HTTP_PROXY=http://[proxy-addr]:[proxy-port]/" "HTTPS_PROXY=https://[proxy-addr]:[proxy-port]/" "NO_PROXY=localhost,127.0.0.1,docker-registry.somecorporation.com" 

4. 更新配置:

 $ systemctl daemon-reload

5. 重启Docker服务:

 $ systemctl restart docker

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

(0)

相关推荐

  • Docker设置代理的方法教程

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

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

  • Docker网络代理设置详解

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

  • docker网络配置过程详解介绍

    目录 Linux内核实现名称空间的创建 操作Network Namespace 创建veth pair 实现Network Namespace间通信 四种网络模式配置 容器的常用操作 自定义docker0桥的网络属性信息 Linux内核实现名称空间的创建 ip netns命令 可以借助ip netns命令来完成对 Network Namespace 的各种操作.ip netns命令来自于iproute安装包,一般系统会默认安装,如果没有的话,请自行安装. 注意:ip netns命令修改网络配置时

  • Docker 网络工作原理详解

    Docker 网络工作原理 当Docker server也就是docker daemon启动时,会自动创建一个名字是docker0的bridge,每当docker创建一个Container时,会在主机上面创建一个名字是veth*的ethernet 端口,并把这个eth*加入到docker0的bridge,在container中会自动创建一个名字是eth0的ethernet端口,这个eth0和veth*会形成一个类似管道的对,一一对应. 配置DNS docker是如何分配每个container的h

  • docker网络双向连接详解

    查看docker网络 docker network ls [root@master ~]# docker network ls NETWORK ID NAME DRIVER SCOPE e9ecd3b9be87 bridge bridge local 45336895a3a4 host host local 6a44e8330adb none null local 创建网桥 docker network create bridge my-bridge [root@master ~]# docke

  • http proxy 对网络请求进行代理使用详解

    目录 正文 命令行启动服务器 详细的调用栈 捕捉错误 正文 使用下面这段简单的代码对网络请求进行代理: const http = require('http'); const httpProxy = require('http-proxy'); const targetUrl = 'https://www.sap.cn/index.html'; const proxy = httpProxy.createProxyServer({ target: targetUrl, }); http.crea

  • docker之docker-machine用法详解

    docker-machine 是docker官方提供的docker管理工具. 通过docker-machine可以轻松的做到: 在Windows平台和MAC平台安装和运行docker 搭建和管理多个docker 主机 搭建swarm集群 环境win下面安装的virtualbox,virtualbox安装的centos7,网络模式NAT+hostonly ip:192.168.56.102(hostonly) 1.安装docker-machine: curl -L https://github.c

  • docker+gitlab+gitlab-runner部署详解

    环境 服务端:centos7 客户端:window 在centos7上部署docker+gitlab+gitlab-runner,win10利用ssh连接,开发人员只需提交代码,就可以进行项目文件上传,打包镜像,发布运行测试 一.centos7上安装docker和docker-compose 安装docker: 1.Docker 要求 CentOS 系统的内核版本高于 3.10 ,查看本页面的前提条件来验证你的CentOS 版本是否支持 Docker . 通过uname -r命令查看你当前的内核

  • Flutter Http网络请求实现详解

    Http网络请求是一门开发语言里比较常用和重要的功能,主要用于资源访问.接口数据请求和提交.上传下载文件等等操作,Http请求方式主要有:GET.POST.HEAD.PUT.DELETE.TRACE.CONNECT.OPTIONS.本文主要GET和POST这两种常用请求在Flutter中的用法,其中对POST将进行着重讲解.Flutter的Http网络请求的实现主要分为三种:io.dart里的HttpClient实现.Dart原生http请求库实现.第三方库实现.后面将会给大家详细讲解这几种区别

  • php curl发起get与post网络请求案例详解

    curl介绍 curl是一个开源的网络链接库,支持http, https, ftp, gopher, telnet, dict, file, and ldap 协议.之前均益介绍了python版本的pycurl https://www.jb51.net/article/221508.htm ,现在介绍怎么使用php版本的URL. curl get请求 function curl_get($url){ $header = array( 'Accept: application/json', );

  • Docker Swarm入门实例详解

    Swarm 在 Docker 1.12 版本之前属于一个独立的项目,在 Docker 1.12 版本发布之后,该项目合并到了 Docker 中,成为 Docker 的一个子命令.目前,Swarm 是 Docker 社区提供的唯一一个原生支持 Docker 集群管理的工具.它可以把多个 Docker 主机组成的系统转换为单一的虚拟 Docker 主机,使得容器可以组成跨主机的子网网络. 1. Swarm 认识 Swarm 是目前 Docker 官方唯一指定(绑定)的集群管理工具.Docker 1.

随机推荐