前言:

        Docker安装倒是很简单,按照步骤轻松完成,但是在联网方面还是出现问题,大概是伟大的祖国防火墙将其拦下,但在开发中要遇山开山,见水搭桥。在其中我将解决方法记录下来,每次解决了困难想分享找不到地方,就把它写下来自己看吧,见证自己的成长。 

正文:

(一)安装Docker

  安装环境:Ubuntu 16.04(LTS)

1、简单方法

# sudo apt-get update
# sudo apt-get install docker

完成! 但是这种方法有一个缺点:安装的不一定是最新的docker

2、我采用的方法:

升级source列表并保证https和ca证书成功安装

# apt-get update
# apt-get install apt-transport-https ca-certificates

增加新的GPG 密钥

# apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D

新增或编辑source列表里的docker.list文件

# gedit /etc/apt/sources.list.d/docker.list  //如果不存在就新增

按照系统版本增加entry(Ubuntu Xenial 16.04 (LTS))在list文件里增加如下内容:

deb https://apt.dockerproject.org/repo ubuntu-xenial main

重新执行更新操作,并删除老的repo

# apt-get purge lxc-docker  //没有安装的话,跳过

从14.04版本以上开始docker推荐安装linux-image-extra

# apt-get install linux-image-extra-$(uname -r)

有些内容可能会系统里已经有,所以无关紧要。

最关键的一步:

    安装docker

# apt-get update
# apt-get install docker-engine
# service docker start
# docker run hello-world

如果打印一堆关于hello-world的信息说明安装完成。

(二)解决下载镜像被阻的问题

我要用Docker下载网上的镜像进行深度学习,结果下拉的时候出现如下错误:

root@ygh:~/deep_ocr_workspace# docker pull jinpengli/deep_ocr_cpu_docker:latest
Error response from daemon: Get https://registry-1.docker.io/v2/jinpengli/deep_ocr_cpu_docker/manifests/latest: read tcp 10.103.247.60:55446->50.17.62.194:443: read: connection reset by peer

显示 connection reset by peer,TCP连接被阻断了,50.17.62.194这个ip在这里是不能用的。所以要找到其它可用 IP。

解决方案:

1、找到Docker可用ip:

输入下列命令:

# dig auth.docker.io

打印如下:

root@ygh:~/deep_ocr_workspace# dig auth.docker.io

; <<>> DiG 9.10.3-P4-Ubuntu <<>> auth.docker.io
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 40512
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;auth.docker.io.            IN    A

;; ANSWER SECTION:
auth.docker.io.        60    IN    A    52.5.246.212
auth.docker.io.        60    IN    A    50.17.62.194
auth.docker.io.        60    IN    A    34.193.147.40

;; Query time: 179 msec
;; SERVER: 127.0.1.1#53(127.0.1.1)
;; WHEN: Tue Mar 14 15:12:31 CST 2017
;; MSG SIZE  rcvd: 91

我们在这里选用34.193.147.40这个ip,将它替换掉即可。

2、修改IP:

/etc/hosts强制 docker.io 相关的域名解析到这个可用 IP :

步骤如下:

# gedit /etc/hosts

然后在最后一行加上下面这一行内容即可:

34.193.147.40 registry-1.docker.io auth.docker.io

到这里就解决问题了。之后再使用

# docker pull jinpengli/deep_ocr_cpu_docker:latest

就可以成功pull文件了。

(三)解决将Docker内文件转移到主机的方法

1、首先要挂在Docker容器:

 

# sudo docker run -ti --volume=${HOME}/deep_ocr_workspace:/workspace jinpengli/deep_ocr_cpu_docker:latest /bin/bash

 

然后另开一个终端:

查看容器名称或者id:

# docker ps

然后拷贝即可:

# docker cp <containerId>:/file/path/within/container /host/path/target  

比如:

root@ygh:~/deep_ocr_workspace# docker ps
CONTAINER ID        IMAGE                                  COMMAND             CREATED             STATUS              PORTS               NAMES
45e0a73507ce        jinpengli/deep_ocr_cpu_docker:latest   "/bin/bash"         26 seconds ago      Up 24 seconds                           condescending_brahmagupta

# docker cp 45e0a73507ce:/workspace/caffe_dataset_lower_eng/images /home/ygh/program/

这样就完成拷贝至主机的工作。

将主机文件拷贝到容器在工作中也有涉及:

通过如上方法获得CONTAINER ID,然后执行下面的命令:

# sudo docker cp host_path containerID:container_pat

   比如:

# docker cp id_test1.png a7cd897f38bc:/workspace/data

  完成此工作!

 

(四)启动现有的容器

当我们遇到需要启动上次建立的容器的时候,我找到了解决办法,如下:

1、查看现有的容器列表:

 

# docker ps -a

 

root@ygh:/home/ygh/caffe# docker ps -a
CONTAINER ID        IMAGE                                  COMMAND             CREATED             STATUS                     PORTS               NAMES
7435041f1a0f        jinpengli/deep_ocr_cpu_docker:latest   "/bin/bash"         2 hours ago         Up 2 hours                                     eloquent_cray
25f572cc7a93        jinpengli/deep_ocr_cpu_docker:latest   "/bin/bash"         4 days ago          Exited (0) 7 seconds ago                       flamboyant_goldwasser
a7cd897f38bc        jinpengli/deep_ocr_cpu_docker:latest   "/bin/bash"         6 days ago          Exited (0) 6 days ago                          tender_davinci

 

可以看到如上列表,此时我们想启动第二个容器,有很多方法:

  docker start/stop/restart<container> :开启/停止/重启container
 
docker start [container_id] :再次运行某个container(包括历史container)
  docker attach [container_id]:连接一个正在运行的container实例(即实例必须为start状态,可以多个窗口同时attach一个container实例)
  docker start -i <container>:启动一个container并进入交互模式(相当于先start,在attach)

步骤如下:

 

 

# docker start -i 25f572cc7a93

就可以直接启动,也可以先start 再 attach即可。

 

                                       by  still、