第一部分:极简安装 Docker
- sudo apt remove docker docker-engine docker.io containerd runc
- sudo apt update sudo apt install apt-transport-https ca-certificates curl software-properties-common gnupg
- curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg –dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
- echo “deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable” | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
- sudo apt update sudo apt install docker-ce docker-ce-cli containerd.io
第二部分:核心难点——解决“拉取不到镜像”
这是所有国内 Docker 初学者遇到的最大拦路虎。当你执行 docker pull 时,经常会卡住或报错 TLS handshake timeout。这是因为 Docker Hub 的官方服务器在海外。
出现的报错示例:
root@gx-VMware-Virtual-Platform:~# docker pull nginx Using default tag: latest Error response from daemon: failed to resolve reference "docker.io/library/nginx:latest": failed to do request: Head "https://registry-1.docker.io/v2/library/nginx/manifests/latest": dial tcp 128.242.240.117:443: connect: connection refused
针对这个问题,我为你整理了三种不同层级的解决方案:
方案一:配置国内镜像加速器(基础方案)
这是最常规的方法,但近期国内很多镜像站(如阿里云、网易等)经常不稳定。建议优先尝试,不行再换方案二。
- 创建或修改配置文件:(用vim编辑也可,只是需要apt-get install vim)sudo mkdir -p /etc/docker
sudo nano /etc/docker/daemon.json - 在文件中粘贴以下内容(这里提供几个目前相对可用的):
{
"registry-mirrors": [
"https://docker.m.daocloud.io",
"https://huecker.io",
"https://dockerhub.timeweb.cloud"
]
} - 保存退出(按
Ctrl+O回车,再按Ctrl+X)。 - 重启 Docker 服务让配置生效:sudo systemctl daemon-reload
sudo systemctl restart docker
方案二:配置 Docker 代理(进阶稳妥方案)
如果你有自己的 VPN 或代理节点(比如你的物理机上开了代理,或者局域网内有代理服务器),让 Docker 走代理是最稳的。
注意: Docker 拉取镜像不走系统环境变量的代理,必须单独配置 systemd。
- 创建配置目录:
sudo mkdir -p /etc/systemd/system/docker.service.d - 创建代理文件:
sudo nano /etc/systemd/system/docker.service.d/http-proxy.conf - 粘贴以下内容(假设你的代理在 192.168.1.100 的 7890 端口,请根据实际情况修改):
[Service]
Environment="HTTP_PROXY=http://192.168.1.100:7890"
Environment="HTTPS_PROXY=http://192.168.1.100:7890" - 重启服务:
sudo systemctl daemon-reloadsudo systemctl restart docker
第三部分:渗透测试常用 Docker 操作速查
搭建好环境后,我们来实战。不讲虚的,只讲你做实验、搭靶场最常用的命令。
1. 概念速解
- 镜像 (Image): 相当于“光盘”或“安装包”。(只读的)
- 容器 (Container): 相当于“运行起来的系统”。(可读写的)
2. 只有 5 个命令的“生存指南”
假设我们要搭建一个 nginx web服务器做测试。
Step 1: 运行容器 (Run)
格式: docker run -d -p [宿主机端口]:[容器内部端口] --name [起个名字] [镜像名]sudo docker run -d -p 8080:80 --name my-web nginx
-d: 后台运行(不占用你当前的终端)。-p 8080:80: 最关键!把你的 Ubuntu 的 8080 端口映射给容器的 80 端口。- 测试: 打开浏览器访问
http://localhost:8080,你应该能看到 Nginx 欢迎页。
Step 2: 查看正在运行的容器 (Ps)
sudo docker ps
- 你能看到容器 ID、状态、端口映射情况。如果不加参数,只显示运行中的;
docker ps -a显示所有的。
Step 3: 进入容器内部 (Exec)
这就好比 SSH 连进了一台虚拟机,适合进去修改配置文件或查看 Flag。
格式:docker exec -it [容器名/ID] /bin/bashsudo docker exec -it my-web /bin/bash
- 退出容器输入
exit即可。
Step 4: 停止与启动 (Stop/Start)
sudo docker stop my-web# 关机sudo docker start my-web# 开机
Step 5: 删除容器 (Rm)
做完实验,清理现场。
sudo docker stop my-web# 先停止sudo docker rm my-web# 再删除
如果想连镜像也删了: docker rmi nginx
第四部分:常见“坑点”排雷指南
坑点 2:端口冲突 (Bind for 0.0.0.0:xx failed)
现象: 运行容器时报错:port is already allocated。
原因: 你指定的宿主机端口(冒号左边的端口)已经被别的程序占用了。
解决: 换个端口。比如原命令是 -p 80:80,改成 -p 8081:80 即可。
坑点 3:名字冲突 (The container name “/xxx” is already in use)
现象: 再次运行同一个 docker run 命令报错。
原因: 即使容器停止了,它还在那躺着(类似关机的电脑)。你不能创建一个同名的新容器。
解决:
- 删除旧的:
docker rm [容器名] - 或者给新的容器起个不同的名字:
--name my-web-2
发表回复