常见问题整理

本文件主要针对Docker使用过程中,碰到的问题的处理方法的整理,可能因操作系统版本等不同产生不同的问题,仅供参考。

目录Docker挂载主机目录,进入容器访问相应的目录/文件出现Premission denied的权限访问问题

Centos7中docker开启远程访问(Centos7 docker remote access configure)

将docker服务器镜像和容器迁移到新位置

docker 端口映射错误解决方法

Docker挂载主机目录,进入容器访问相应的目录/文件出现Premission denied的权限访问问题

1.Docker挂载主机目录:

docker run -it --name test -p 8081:8080 -v /home/superadmin/deploy/webapps/:/usr/local/tomcat/webapps/ tomcat:7.0.68-jre8

2.进入容器查看相应目录,出现Permission denied

root@351a772b1ab3:/usr/local/tomcat/webapps# ls -l

ls: cannot open directory .: Permission denied

3.问题原因及解决办法

原因是CentOS7中的安全模块selinux把权限禁掉了。

在运行容器的时候,给容器加特权,及加上 --privileged=true 参数:

docker run -it --name test -p 8081:8080 -v /home/superadmin/deploy/webapps/:/usr/local/tomcat/webapps/ --privileged=true tomcat:7.0.68-jre8

Centos7中docker开启远程访问(Centos7 docker remote access configure)

在作为docker远程服务的centos7机器中配置: 1、在/usr/lib/systemd/system/docker.service,配置远程访问。主要是在[Service]这个部分,加上下面两个参数

ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock

2、docker重新读取配置文件,重新启动docker服务

# systemctl daemon-reload

# systemctl restart docker

3、查看docker进程,发现docker守护进程在已经监听2375的tcp端口

# ps -ef|grep docker

root 26208 1 0 23:51 ?00:00:00 /usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock

4、查看系统的网络端口,发现tcp的2375端口,的确是docker的守护进程在监听

# netstat -tulp

Active Internet connections (only servers)

Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name

tcp0 0 0.0.0.0:ssh 0.0.0.0:* LISTEN 886/sshd

tcp6 0 0 [::]:2375 [::]:* LISTEN 26208/dockerd

5、这里拿本地的ubuntu做客户端,来访问centos7的docker服务,访问成功。

$ sudo docker -H tcp://139.129.130.123:2375 images

REPOSITORY TAG IMAGE IDCREATED SIZE

mysql 5.6 f8fe303bcac2 4 days ago 298MB

注:如果修改后没起作用,可能需要把远程docker服务器防火墙关闭。

将docker服务器镜像和容器迁移到新位置

如果你当前存放docker容器和镜像的磁盘空间不足,想将现有的容器和镜像迁移到新的位置,将/var/lib/docker 中已存在的数据移动到新的位置里。然后创建一个软链接。

1.停止docker引擎

sudo systemctl stop docker

2.拷贝docker目录到新路径

cp -rp /var/lib/docker /mnt/new_volume

3.创建软链接 创建软链接(译者注:创建软链之前,请先将原/var/lib/docker目录修改为其它名字,如/var/lib/docker-backup)

# mv /var/lib/docker /var/lib/docker-backup-2017-1104

# ln -s /mnt/new_volume/docker /var/lib/docker

4.然后重新加载 daemon守护程序和 启动 docker服务。

# sudo systemctl daemon-reload

# sudo systemctl start docker

docker 端口映射错误解决方法

使用docker run 命令,有-p参数时,容器启动报错:

COMMAND_FAILED: '/sbin/iptables -t nat -A DOCKER -p tcp -d 0/0 --dport 8111 -j DNAT --to-destination 172.17.0.6:8111 ! -i docker0' failed: iptables: No chain/target/match by that name.

解决方法:

1.pkill docker

2.iptables -t nat -F

3.ifconfig docker0 down

4.brctl delbr docker0 (如果没有这个命令,执行安装命令:yum install bridge-utils)

5.sudo systemctl daemon-reload

sudo systemctl start docker

docker 容器内时区不正确的解决方法

build镜像Dockerfile添加:

ENV TZ=Asia/Shanghai RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

docker run命令是容器内时间和宿主机保存一致方法

run命令添加如下参数

-v /etc/localtime:/etc/localtime:ro

centOS 7 安装docker

1.vi /etc/yum.repos.d/docker.repo

[dockerrepo]

name=Docker Repository

baseurl=http://mirrors.zte.com.cn/docker/yum/repo/centos7

enabled=1

gpgcheck=1

gpgkey=http://mirrors.zte.com.cn/docker/yum/gpg

2.sudo yum makecache

3.sudo yum install docker-engine

4.systemctl daemon-reload

5.systemctl restart docker