把 CentOS7 上的 docker 1.12 升级到 docker-ce 18.03

升级的过程比较简单明了, docker-ce 的官方文档有比较详细的介绍。 现在把我自己的升级过程介绍一下,并把遇到的问题以及解决办法,也分享一下。

1. 停止原来的所有运行的 docker, #docker stop xxx
2. 删除原来的 docker 软件包,

yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-selinux \
                  docker-engine-selinux \
                  docker-engine

3. 添加新的 Repo:

yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo

可选

yum-config-manager --enable docker-ce-edge
yum-config-manager --enable docker-ce-test

4. 安装新的 docker-ce,并启动:

 yum install docker-ce
 systemctl start docker

以上就是一个完整的更新过程。

然而, 在升级以后,发现原来的容器不见了。 解决的办法是: 去 /var/lib/docker/containers/dockxxxxHASHxxxx
修改  hostconfig.json 把其中的 “Runtime”:”docker-runc”
修改成: “Runtime”:”runc”
重启 docker 服务。

其实我们也会在 syslog 里找到这样的报错信息:
dockerd: time=”2018-03-03T11:37:24.024568022+08:00″ level=error msg=”Failed to start container dockxxxxHASHxxxx: no such runtime ‘docker-runc'”

这样,我们就可以找回原来的 docker 了。
# docker container ls -a

另外一种部署 Certbot 的办法

如果还没有安装过  pip , 就用 yum install python-pip 安装,然后就升级 pip:
# pip install –upgrade pip

  1. 查看官方版本 # pip search certbot ;
  2. 卸载yum安装的certbot和pyOpenSSL: # yum remove certbot pyOpenSSL;
  3. pip安装certbot: # pip install certbot certbot-nginx certbot-apache
    1. 如果遇到 Python.h或者pyconfig.h找不到的错误,# yum install -y python-devel;
    2. 如果找不到opensslv.h头文件,#  yum install -y openssl-devel;
  4. 查看所有已经安装的证书: # certbot certificates。

添加或者 renew 单独证书:

# certbot --apache -d mydomain.yj777.cn certonly

Renew 所有证书,可以把下面的行写到 cronjob。

15 3 1,15 * * /usr/bin/certbot renew –quiet

== 2018/1/20 后记:

如果运行 certbot certificates 看到错误:certbot ImportError: No module named OpenSSL
可以考虑,重新安装 pyOpenSSL 模块。

也就是先 pip uninstall certbot pyOpenSSL

再  pip install cerbot 即可, pyOpenSSL 会自动安装。

== 2018/2/5 后记:
遇到 " OSError: ctypes.util.find_library() did not manage to locate a library called 'augeas'" 错误:
yum install augeas-libs

遇到:“ImportError: No module named ndg.httpsclient.ssl_peer_verification” 错误:
pip install ndg-httpsclient

遇到:“UnknownExtra: requests 2.6.0 has no such extra feature ‘security’” 错误:
# pip install acme –upgrade

以上基本上能解决大部分的 certbot(Let’s Encrypt) 安装和升级中发现的问题,如果还有问题,就点击联系我们,留言吧。我们会提供有偿的支持服务。

如果是在 CentOS6 上部署的话, 需要先升级 Python:

yum install -y epel-release
yum install -y python34
# 因为yum安装时没能同时安装pip与setuptools,所以我们要手动安装,这里采用拿第三方包解决问题
# curl -O https://bootstrap.pypa.io/get-pip.py
# sudo python3 get-pip.py
然后就可以运行 pip 命令了。
— 补充:
原先 Apache 认证器的,如果 Web 服务器切换成 Nginx 了, 可以直接用
# /usr/local/bin/certbot renew –nginx -d domain_name –no-redirect
更新证书

crontab 的写法,每周三,凌晨 4:00 更新:
00 4 * * 3 /usr/local/bin/certbot renew –quiet –noninteractive –installer nginx –pre-hook “service nginx stop” –post-hook “service nginx start”