CentOS 7.0,无外网直接访问权限,有一台代理服务器。

首先安装docker-ce,参考http://blog.51cto.com/aaronsa/2056882

除非特殊说明,以下操作都用root用户:

$ export http_proxy=http://xxxx

$ export https_proxy=http://xxxx

$ yum install -y yum-utils # 安装yum-config-manager

$ yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo # 添加docker-ce yum源

$ yum install docker-ce

$ systemctl start docker

第一个坑,启动失败,通过journalctl -xe查看启动日志,报错

devmapper: Error while creating filesystem xfs on device ....

参考http://www.cnblogs.com/FoChen/p/8708932.html

$ yum update xfsprogs

第二个坑,普通用户无法使用docker命令,报错

Got permission denied while trying to connect to the Docker daemon socket at ...

查了一下资料,原来docker命令通过一个Unix socket与docker daemon通信,涉及到对Unix socket 访问权限问题,参考https://www.cnblogs.com/franson-2016/p/6412971.html

查了一下已经有docker组了,应该是yum install docker-ce时自动创建的,于是把普通用户添加进docker组就可以了;

$ gpasswd -a <user> docker

普通用户需要重新登录;

第三个坑,docker pull hello-world,报错:

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)

确认了一下代理服务器,不是代理服务器出了问题;

在浏览器里试了一下https://registry-1.docker.io,没有内容,以为是被墙了,大误,导致走了一大段错路,后来回头想想看,这应该是个api服务器,只是对空请求返回空结果而已,HTTP返回码是200,不是被墙,哪怕当时试一下https://registry-1.docker.io/v2/,都不会走这条弯路;

刚开始按照错误思路,想添加国内registry镜像,查找资料:

  • 尝试在/etc/default/docker和/etc/sysconfig/docker中通过DOCKER_OPTS设置--registry-mirror参数无效,疑似配置文件不对;
  • 参考了很多资料之后(尤其是DaoCloud的Docker加速器文档和set_mirror.sh脚本),了解到docker从1.10~1.12版本经历了一次改版,开始使用/etc/docker/daemon.json下的json格式的配置文件,连版本号格式都变了;于是在/etc/docker/daemon.json中写入docker镜像加速器的地址;(无论aliyun还是daocloud,都要求注册登录以获取专用加速器地址,如果按照别人的文档把别人的加速器地址拿来用了,应该会发生带宽抢占);

既然是错误思路,当然没有解决我的问题,不过也不算是空手而归,对docker的架构有了些微了解:

  • docker pull的时候,dockerd服务是干活的主体,docker工具就是个命令行封装;
  • docker的hub与registry服务器,有点类似于openstack里的glance和swift;

正确思路是将代理设置到dockerd的环境变量里,这就涉及到了systemd的一点知识,参考了Arch-wiki

然后重启dockerd服务;

$ vi /etc/systemd/system/docker.service.d/proxy.conf

[Service]
Environment="HTTP_PROXY=192.168.1.1:8080"
Environment="HTTPS_PROXY=192.168.1.1:8080" $ systemctl daemon-reload $ systemctl show docker --property Environment #确认环境变量生效 $ systemctl restart docker

用普通用户再试一下:

$ docker pull hello-world
Using default tag: latest
latest: Pulling from library/hello-world
9bb5a5d4561a: Pull complete
Digest: sha256:f5233545e43561214ca4891fd1157e1c3c563316ed8e237750d59bde73361e77
Status: Downloaded newer image for hello-world:latest $ docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest e38bc07ac18e 2 weeks ago 1.85kB $ docker run hello-world Hello from Docker!
This message shows that your installation appears to be working correctly. To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(amd64)
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal. To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash Share images, automate workflows, and more with a free Docker ID:
https://hub.docker.com/ For more examples and ideas, visit:
https://docs.docker.com/engine/userguide/

CentOS7 docker试水的更多相关文章

  1. docker试水

    1.清理旧版本yum remove docker \                  docker-common \                  docker-selinux \        ...

  2. POJ 2502 - Subway Dijkstra堆优化试水

    做这道题的动机就是想练习一下堆的应用,顺便补一下好久没看的图论算法. Dijkstra算法概述 //从0出发的单源最短路 dis[][] = {INF} ReadMap(dis); for i = 0 ...

  3. 大众点评试水O2O新模式:实体店试穿,扫描二维码付款 现场取货

    在餐饮美食行业取得不错的成绩之后,大众点评将触角延伸到了线下的传统商铺,开始涉足线下商品的 O2O 团购.和传统的线上下单,线下消费的 O2O 模式不同.大众点评的 O2O 团购用户,可在店内试穿后通 ...

  4. Json.Net6.0入门学习试水篇

    原文:Json.Net6.0入门学习试水篇 前言 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.简单地说,JSON 可以将 JavaScript 对象中 ...

  5. 第一回:Scrapy的试水

    前言:今天算是见到Scrapy的第二天,之前只是偶尔查了查,对于这个框架的各种解释,我-----都-----看------不------懂----,没办法,见面就是刚. 目的:如题,试水 目标:< ...

  6. CSharpGL(49)试水OpenGL软实现

    CSharpGL(49)试水OpenGL软实现 CSharpGL迎来了第49篇.本篇内容是用C#编写一个OpenGL的软实现.暂且将其命名为SoftGL. 目前已经实现了由Vertex Shader和 ...

  7. CentOS7 Docker私有仓库搭建及删除镜像 【转】

    文章来源:centos7 Docker私有仓库搭建及删除镜像 如果不想用私有镜像库,你可以用docker的库 https://hub.docker.com 环境准备 环境:两个装有Docker 17. ...

  8. centos7 docker升级到最新稳定版本

    原文:centos7 docker升级到最新稳定版本 一.前言 docker的版本分为社区版docker-ce和企业版dokcer-ee社,区版是免费提供给个人开发者和小型团体使用的,企业版会提供额外 ...

  9. UITableView(自定义cell)试水心得

    初次试水自定义cell的UITableView 实现目标      最终实现结果   界面复原度:98% 未能完全复刻的地方:下半部分的tableview与头部的控件间距上的误差 原因:在做table ...

随机推荐

  1. Delphi 项目总结

    Delphi 项目总结 随着项目的失败,这些天一直在总结失败的原因,到底是为什么?     一.技术层面         1.少用指针类型,多用类.             虽然指针类型能有效的节约内 ...

  2. easyui 在编辑状态下,动态修改其他列值。

    首先是自定义了一个方法uodateColumn更新列值 /** *自定义的修改列值方法 */ $.extend($.fn.datagrid.methods, { updateColumn: funct ...

  3. 面向对象,更适合JavaScript

    面向对象程序设计是软件开发中一个很庞大很复杂的话题,它并不是仅仅学会类.继承.封装.多态这些面向对象编程语法元素就表示掌握的,这些语法元素只是实现面向对象程序的工具, 就像砖块.水泥能搭建小屋,也能造 ...

  4. sublime中安装sublimecodeintel插件

    本文是基于在Windows上对sublime进行相关配置. 1.安装sublime,在官网http://www.sublimetext.com/3. 如果是在Linux系统上安装只需要输入命令直接安装 ...

  5. PHP实现单例模式和观察者模式

    单例模式的实现: PHP中单例模式常用在数据库连接部分,省掉了大量的new操作进而节省了很多资源.单例模式还可以用在全局配置类中. 单例模式,顾名思义就是说只有一个实例,这就要求防止外部随意实例化对象 ...

  6. JavaScript中对数组和数组API的认识

    JavaScript中对数组和数组API的认识 一.数组概念: 数组是JavaScript中的一类特殊的对象,用一对中括号“[]”表示,用来在单个的变量中存储多个值.在数组中,每个值都有一个对应的不重 ...

  7. Flask入门之上传文件到服务器

    今天要做一个简单的页面,可以实现将文件 上传到服务器(保存在指定文件夹) #Sample.py # coding:utf-8 from flask import Flask,render_templa ...

  8. JavaScript 之函数

    刚开 始学习 JS 时,挺不习惯它函数的用法,就比如一个 function 里面会嵌套一个 function,对于函数里创建变量的作用域也感到很迷惑,这个的语法和 JAVA 相差太多,为此,阅读了&l ...

  9. 怎么解决你的小程序有“bug”的问题?

    为了避免小程序在开发运行之后出现"bug"无法知晓,Fundebug研发的小程序bug监控服务作为小程序的运维中心,很好的解决了这个问题. 该插件可以监控小程序中的所有函数调用: ...

  10. Oracle中的优化问题

    1. 在查询时, 尽量使用列名; 2. 在子查询和多表查询都可以达到目的时, 尽量使用多表查询; 3. 在集合运算中, 如果集合中含有null, 那么不能用not in, 但可以用in(可以理解为nu ...