常见问题整理
本文件主要针对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