记录了 Docker 在使用过程中常见的问题和解决方案
安装 如果提示下列警告就先删除 原有Docker PS:自己保存需要的数据
1 2 3 4 5 6 7 8 9 10 11 12 # Executing docker install script, commit: 11aa13e Warning: the "docker" command appears to already exist on this system. If you already have Docker installed, this script can cause trouble, which is why we're displaying this warning and provide the opportunity to cancel the installation. If you installed the current Docker package using this script and are using it again to update Docker, you can safely ignore this message. You may press Ctrl+C now to abort this script. + sleep 20
安装命令 Docker 本体 1 curl -q https://get.docker.com | sh
Docker Machine 1 2 curl -L https://github.com/docker/machine/releases/download/v0.14.0/docker-machine-`uname -s`-`uname -m` >/tmp/docker-machine && \ sudo install /tmp/docker-machine /usr/local /bin/docker-machine
Docker Compose 1 2 sudo curl -L https://github.com/docker/compose/releases/download/1.19.0/docker-compose-`uname -s`-`uname -m` -o /usr/local /bin/docker-compose sudo chmod +x /usr/local /bin/docker-compose
卸载 1 2 yum remove docker yum remove docker-common
Docker 相关配置 添加镜像地址 注意 如果已经配置过 daemon.json
请手动添加
1 2 echo '{"registry-mirrors": ["https://registry.docker-cn.com"]}' > /etc/docker/daemon.jsonservice docker restart
私有源 开启HTTP 注意 如果已经配置过 daemon.json
请手动添加
1 2 echo '{ "insecure-registries": ["docker.sixi.com"] }' > /etc/docker/daemon.jsonservice docker restart
登录私有源 1 docker login registry.sixi.com
配置Docker代理 1 2 3 4 5 6 7 8 9 mkdir -p /etc/systemd/system/docker.service.d cat >/etc/systemd/system/docker.service.d/proxy.conf<<EOF [Service] Environment="ALL_PROXY=socks5://192.168.2.111:1080/" EOF systemctl daemon-reload systemctl restart docker.service # 查看环境变量是否生效 systemctl show --property=Environment docker
配置Docker容器镜像存储路径 修改 nano /lib/systemd/system/docker.service
文件
调整启动命令为 ExecStart=/usr/bin/dockerd --graph=/home/lib/docker
执行 systemctl daemon-reload
移动原有数据 mv /var/lib/docker /home/lib
创建软连接 ln -s /home/lib/docker /var/lib/docker
(可以不执行 但是防止配置失败 重新创建 还是连接一下)
重启 Docker service docker restart
如果是首次安装 直接创建软连接即可 (PS: 这种方式会丢失Volume的数据 小心!!!)
1 2 3 4 5 service docker stop rm -rf /var/lib/docker mkdir -p /home/lib/docker ln -s /home/lib/docker /var/lib/docker service docker start
垃圾清理(仅支持1.13之后的版本) 全局清理1 docker system prune --volumes -f
批量删除容器 1 docker rm $(docker ps -a |awk '{print $1}' | grep [0-9a-z])
批量删除镜像 1 docker rmi $(docker images | awk '{print $3}' | grep [0-9a-z])
批量删除孤立的Volume 1 docker volume rm $(docker volume ls -qf dangling=true )
Docker清理脚本(基于DockerMachine) 1 2 3 4 5 6 7 8 for i in $(docker-machine ls | awk '{print $1}' | grep -v "NAME" ); do echo "开始清理 ${i} 的已停止容器..." docker-machine ssh ${i} docker rm $(docker-machine ssh ${i} docker ps -a |awk '{print $1}' | grep [0-9a-z]) echo "开始清理 ${i} 的未被使用镜像..." docker-machine ssh ${i} docker rmi $(docker-machine ssh ${i} docker images |awk '{print $3}' | grep [0-9a-z]) -f echo "开始清理 ${i} 的孤立数据卷..." docker-machine ssh ${i} docker volume rm $(docker-machine ssh ${i} docker volume ls -qf dangling=true ) done
常见问题和注意事项 重启firewall服务导致Docker对外端口无法访问问题原因: 因为Docker是通过iptables转发实现容器和宿主机互通的 重启firewall会导致 转发链丢失 解决方案: 重启Docker即可恢复 Docker 容器内部无法联网原因原因: 好多种 解决方案: 重新创Docker网络1 2 3 4 5 pkill docker iptables -t nat -F ifconfig docker0 down brctl delbr docker0 service docker start