学习docker遇到的问题
2017-02-07 13:13
363 查看
本文主要用于收集整理在学习docker中遇到的问题,方便以后自己查阅,以及给遇到同样问题的网友填坑(^o^)/YES!
由于是在公司网络,使用了代理上网(代理地址:172.17.79.88)。安装docker(1.13.0)后docker创建了一个虚拟网络桥连,恰好也使用了172.17.1.0/16的网段,导致电脑配置的代理服务器172.17.79.88直接找到了docker的网段IP(172.17.0.1),从而导致无法上网。
找到了原因,我们就让docker避开172.17.18.0/24网段。所幸改成192.168.7.1/24,也避免与一般的家用路由器IP段相撞。
局域网保留地址:
A类:10.0.0.0/8 10.0.0.0-10.255.255.255
B类:172.16.0.0/12 172.16.0.0-172.31.255.255
C类:192.168.0.0/16 192.168.0.0~192.168.255.255
下面修改docker配置,以ubuntu16.04为例
修改之前先停止docker服务,然后删除docker0的网络配置
/etc/systemd/system/docker.service
/lib/systemd/system/docker.service
修改完成docker.service后重启可能会警告
根基提示执行
执行完成后在重启
说明配置生效
配置完成后重新docker服务即可.
参考:
http://blog.csdn.net/l6807718/article/details/51701673
http://blog.csdn.net/jcjc918/article/details/46564891
解决方法和问题1 安装完docker后电脑无法上网 一样,
注意上面的 –insecure-registry hub.com 就是需要连接的仓库地址
然后后的操作就和上面一样,重启等
上面的错误分别是 被删除的镜像还有实例(容器)在使用(先删除容器);删除镜像被其他镜像依赖了(先删除其他镜像)
下面的指令谨慎操作
发现上面在解压时找不到文件。
该问题主要是又由于,每个RUN都会开一个实例执行,执行的语句都是从
也可以这样理解,每一次RUN 就好像你重新登录了linux服务器控制台 ,然后执行命令,执行完成后就退出了终端。
那上面的问题怎么解决呢?
第一种方法:每个操作命令 都写绝对路径
第二种方法:在一条RUN里面执行多条语句
上面的 && 表示 如果command1执行成功,则执行command2。
上面的命令也可以简写为:
当然如果觉得把多条命令写到一行太长了,也可以换行
cdate:2017-7-29
ddate:
目前还不知道怎么解决
ddate:2017-8-1
上面的环境是
CentOS release 6.5 (Final)
Docker version 1.7.1, build 786b29d/1.7.1
下面在Ubuntu16.04
Docker version 17.06.0-ce, build 02c1d87中配置代理的方式
发现配置文件在/etc/default/docker,和上面的第一个问题 配置地方相同。
在代理网络环境进行docker search 或则 docker login时 可能会报错如下:
编辑配置文件,配置文件中也有注释说明告诉你怎么加入相关的配置
配置文件如下:
重启docker,然后就可以实现代理访问了。
如果不生效,请注意看下/lib/systemd/system/docker.service这个文件中是否有下面的配置(配置了docker的配置文件在哪里,在里面关联下)
安装完docker后电脑无法上网
在ubuntu16.04上安装完docker后,发现电脑无法上网了。由于是在公司网络,使用了代理上网(代理地址:172.17.79.88)。安装docker(1.13.0)后docker创建了一个虚拟网络桥连,恰好也使用了172.17.1.0/16的网段,导致电脑配置的代理服务器172.17.79.88直接找到了docker的网段IP(172.17.0.1),从而导致无法上网。
找到了原因,我们就让docker避开172.17.18.0/24网段。所幸改成192.168.7.1/24,也避免与一般的家用路由器IP段相撞。
局域网保留地址:
A类:10.0.0.0/8 10.0.0.0-10.255.255.255
B类:172.16.0.0/12 172.16.0.0-172.31.255.255
C类:192.168.0.0/16 192.168.0.0~192.168.255.255
下面修改docker配置,以ubuntu16.04为例
修改之前先停止docker服务,然后删除docker0的网络配置
sudo vim /etc/default/docker #添加1行: DOCKER_OPTS="--bip=192.168.7.1/24" sudo vim /etc/systemd/system/docker.service #如果docker.service文件不存在,则看 #/lib/systemd/system/docker.service文件 #添加: [Service] EnvironmentFile=-/etc/default/docker #修改 ExecStart=/usr/bin/dockerd -H fd:// $DOCKER_OPTS
/etc/systemd/system/docker.service
/lib/systemd/system/docker.service
修改完成docker.service后重启可能会警告
Warning: docker.service changed on disk. Run 'systemctl daemon-reload' to reload units.
根基提示执行
systemctl daemon-reload
执行完成后在重启
service docker restart
ps -ef | grep docker root 5510 1 3 20:49 ? 00:00:00 /usr/bin/dockerd -H fd:// --insecure-registry hub.com --bip=192.168.7.1/24 root 5520 5510 0 20:49 ? 00:00:00 docker-containerd -l unix:///var/run/docker/libcontainerd/docker-containerd.sock --metrics-interval=0 --start-timeout 2m --state-dir /var/run/docker/libcontainerd/containerd --shim docker-containerd-shim --runtime docker-runc root 5620 4415 0 20:49 pts/1 00:00:00 grep --color=auto docker
说明配置生效
配置完成后重新docker服务即可.
参考:
http://blog.csdn.net/l6807718/article/details/51701673
http://blog.csdn.net/jcjc918/article/details/46564891
docker连接非https的仓库
在上面配置完后,比如要登录一个仓库却报错如下,时候docker默认是走https的连接,现在配置运行连接httpdocker login hub.com Username: iccboy Password: Error response from daemon: Get https://hub.com/v1/users/: dial tcp 172.45.1.24:443: getsockopt: connection refused
解决方法和问题1 安装完docker后电脑无法上网 一样,
sudo vim /etc/default/docker # 添加或者修改1行: DOCKER_OPTS="--insecure-registry hub.com --bip=192.168.7.1/24"
注意上面的 –insecure-registry hub.com 就是需要连接的仓库地址
然后后的操作就和上面一样,重启等
docker无法删除本地镜像
docker rmi c61c4aaaf461 Error response from daemon: conflict: unable to delete 5ac53667bacd (must be forced) - image is being used by stopped container cc9decae05cf # 或者 Error response from daemon: conflict: unable to delete c61c4aaaf461 (cannot be forced) - image has dependent child images
上面的错误分别是 被删除的镜像还有实例(容器)在使用(先删除容器);删除镜像被其他镜像依赖了(先删除其他镜像)
下面的指令谨慎操作
#停用全部运行中的容器 docker stop $(docker ps -q) #删除全部容器 docker rm $(docker ps -aq) #停用并删除容器 docker stop $(docker ps -q) & docker rm $(docker ps -aq)
docker build RUN 执行多条命令
有如下脚步RUN mkdir -p /opt/app/soft RUN wget -P /opt/app/soft/ http://nginx.org/download/nginx-1.12.1.tar.gz RUN cd /opt/app/soft RUN tar zxvf nginx-1.12.1.tar.gz
发现上面在解压时找不到文件。
该问题主要是又由于,每个RUN都会开一个实例执行,执行的语句都是从
/bin/sh开始的,因此第一个
RUN cd /opt/app/soft执行后,当前执行的容器中确实切换到了soft目录,单执行完成后容器就销毁了,然后执行第二个
RUN tar zxvf nginx-1.12.1.tar.gz此时 有到了/bin/sh 目录,这个目录下 那肯定找不到 nginx-1.12.1.tar.gz 这个文件。
也可以这样理解,每一次RUN 就好像你重新登录了linux服务器控制台 ,然后执行命令,执行完成后就退出了终端。
那上面的问题怎么解决呢?
第一种方法:每个操作命令 都写绝对路径
RUN tar zxvf /opt/app/soft/nginx-1.12.1.tar.gz -C /opt/app/soft/`
第二种方法:在一条RUN里面执行多条语句
RUN /bin/sh -c 'cd /opt/app/soft/nginx-1.12.1 && make && make install'
上面的 && 表示 如果command1执行成功,则执行command2。
上面的命令也可以简写为:
RUN cd /opt/app/soft/nginx-1.12.1 && make && make install
当然如果觉得把多条命令写到一行太长了,也可以换行
RUN cd /opt/app/soft/nginx-1.12.1 \ && make \ && make install
新版docker无法登录 v1仓库
使用的Docker version 17.06.0-ce, build 02c1d87版本,登录v1版本的仓库docker login hub.com Username: iccboy Password: Error response from daemon: login attempt to http://hub.com/v2/ failed with status: 404 Not Found
cdate:2017-7-29
ddate:
目前还不知道怎么解决
Docker怎么配置代理http proxy进行login/pull/push
cdate:2017-7-30ddate:2017-8-1
vi /etc/sysconfig/docker # 在最后增加如下配置 http_proxy=172.17.79.88:8080 https_proxy=172.17.79.88:8080 ftp_proxy=172.17.79.88:8080 no_proxy=10.0.0.0/8,172.0.0.0/8,127.0.0.0/8 HTTP_PROXY=${http_proxy} HTTPS_PROXY=${https_proxy} NO_PROXY=${no_proxy} export HTTP_PROXY HTTPS_PROXY http_proxy https_proxy NO_PROXY no_proxy
上面的环境是
CentOS release 6.5 (Final)
Docker version 1.7.1, build 786b29d/1.7.1
下面在Ubuntu16.04
Docker version 17.06.0-ce, build 02c1d87中配置代理的方式
$ systemctl show docker | grep Environment EnvironmentFile=/etc/default/docker (ignore_errors=yes)
发现配置文件在/etc/default/docker,和上面的第一个问题 配置地方相同。
在代理网络环境进行docker search 或则 docker login时 可能会报错如下:
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)
编辑配置文件,配置文件中也有注释说明告诉你怎么加入相关的配置
sudo vi /etc/default/docker # 在适当的位置加入代理配置(可以在文件最后加入) http_proxy="http://172.17.79.88:8080" https_proxy="http://172.17.79.88:8080" ftp_proxy="http://172.17.79.88:8080" no_proxy="10.0.0.0/8,172.0.0.0/8,127.0.0.0/8,192.0.0.0/8 export http_proxy https_proxy ftp_proxy no_proxy
配置文件如下:
# Docker Upstart and SysVinit configuration file # # THIS FILE DOES NOT APPLY TO SYSTEMD # # Please see the documentation for "systemd drop-ins": # https://docs.docker.com/engine/articles/systemd/ # # Customize location of Docker binary (especially for development testing). #DOCKERD="/usr/local/bin/dockerd" # Use DOCKER_OPTS to modify the daemon startup options. #DOCKER_OPTS="--dns 8.8.8.8 --dns 8.8.4.4" DOCKER_OPTS="--insecure-registry xxx.com --insecure-registry hub.c.163.com --bip=192.168.7.1/24 --dns xxx.xxx.xxx.xxx" # If you need Docker to use an HTTP proxy, it can also be specified here. #export http_proxy="http://127.0.0.1:3128/" http_proxy="http://172.17.79.88:8080" https_proxy="http://172.17.79.88:8080" ftp_proxy="http://172.17.79.88:8080" no_proxy="10.0.0.0/8,172.0.0.0/8,127.0.0.0/8,192.0.0.0/8 export http_proxy https_proxy ftp_proxy no_proxy # This is also a handy place to tweak where Docker's temporary files go. #export DOCKER_TMPDIR="/mnt/bigdrive/docker-tmp"
重启docker,然后就可以实现代理访问了。
sudo service docker restart
如果不生效,请注意看下/lib/systemd/system/docker.service这个文件中是否有下面的配置(配置了docker的配置文件在哪里,在里面关联下)
[Service] #... EnvironmentFile=-/etc/default/docker #...
相关文章推荐
- docker学习遇到的问题
- 在自己学习stuts是遇到问题后总结的经验。
- 从ACCESS转到学习SQL SERVER所遇到的几个问题
- ajax学习中遇到的问题
- NHibernate基础学习时遇到的问题
- NHibernate学习之一:Many2One遇到的问题
- [学习笔记]学C#遇到的几个问题
- java学习中遇到的问题
- 在学习Hibernate过程中遇到的问题! - the owning Session was closed
- 今天开始使用这个blog来记录我的学习中遇到的问题吧
- 学习中遇到的问题-关于set_new_handler()
- 在WEBSERVICE学习中遇到的问题
- 记录今天学习SQL遇到的一个小问题
- 学习.NET遇到的第一个问题。原来解决这么简单
- 我今天开始正式学习.net遇到的问题
- 学习ejb并配置一个简单的helloEjb是遇到问题后总结的经验。
- 学习NET遇到的问题
- 学习中遇到的问题--关于内存分配异常的问题
- oracle学习中遇到的问题——用select语句创建现有表的副本
- MonoRail入门实例学习遇到的问题