docker镜像拉取失败的解决方案

Posted by Zephyr on Tuesday, June 11, 2024

0x1前言

笔者在完成课程作业时需要构建DVWA靶场,最方便的方式必然是起一个docker,好在官方也提供了这一途径,但是笔者在docker pull时却频频报错,按照网上换源、重装等诸多办法都无济于事,于是有了下面的解决方案。

0x2问题解决过程

现在诸多主流镜像源都已经失效,根据这篇文章,笔者进行了探索。

最轻便的方式当然是使用神奇的科学上网方式来进行解决,但是笔者过于懒惰,不愿意配置clash,因此用代理的方式来pull

值得一提的是,wget http://fishros.com/install -O fishros && bash fishros可以一键安装鱼香ROS的工具箱,这个本来是用来配置ROS的,但是有一键部署clash的方式,非常适合懒人体质。

首先记录下原始pull命令

docker pull vulnerables/web-dvwa

然后进入仓库,将命令换成

docker pull m.daocloud.io/docker.io/vulnerables/web-dvwa

然后等待下载完毕 docker pull过程

输入docker image ls查看镜像

alt text

然后为了方便,将镜像重命名docker tag <yourimage> <renamedimage>,例如笔者使用了docker tag m.daocloud.io/docker.io/vulnerables/web-dvwa s将新的镜像重命名为s,然后将老的镜像移除docker rmi m.daocloud.io/docker.io/vulnerables/web-dvwa

然后运行DWVA

docker run --name dvwa -d -p 8888:80 -p 6666:3306 -e MYSQL_PASS="<yourpassword>" s

查看ifconfig,ip是192.168.153.133,访问http://192.168.153.133:8888/login.php,账号是admin,密码是password,搞定

0x3 附录,docker的常用命令

基本操作

启动docker

systemctl start docker

关闭docker

systemctl stop docker

重启docker

systemctl restart docker

docker设置随服务启动而自启动

systemctl enable docker

查看docker 运行状态

systemctl status docker

镜像操作

  • docker ps:列出运行中的容器
  • docker ps -a:查看所有容器,包括未运行
  • docker stop 容器id或name:停止容器
  • docker kill 容器id:强制停止容器
  • docker start 容器id或name:启动已停止的容器
  • docker inspect 容器id:查看容器的所有信息
  • docker container logs 容器id:查看容器日志
  • docker top 容器id:查看容器里的进程
  • docker exec -it 容器id /bin/bash:进入容器
  • exit:退出容器
  • docker rm 容器id或name:删除已停止的容器
  • docker rm -f 容器id:删除正在运行的容器
  • docker exec -it 容器ID sh:进入容器

referrenceLink :

0x4 科学代理

参考知乎文章 首先查看自己的代理的port,然后

sudo vim /etc/docker/daemon.json

daemon.json中配置

{
    "proxies": {        
        "http-proxy": "http://127.0.0.1:7897",
        "https-proxy": "http://127.0.0.1:7897",
        "no-proxy": "localhost,127.0.0.0/8"
    }
}

:wq保存并退出

然后

sudo vim ~/.docker/config.json

如果没有这个文件就创建一个

然后填入

{
    "auths": {
        "registry.cn-hongkong.aliyuncs.com": {
            "auth": "xxxxxx="
        }
    },
    "proxies": {
        "default": {
            "httpProxy": "http://127.0.0.1:7897",
            "httpsProxy": "http://127.0.0.1:7897",
            "noProxy": "127.0.0.0/8"
        }
    }
}

笔者是在本地运行的,因此删去auths字段。

最后sudo systemctl restart docker重启服务

注:您需要根据自己的代理端口来修改