pwn_docker题目部署
Zach0ry Lv4

docker

Docker 是一个 容器化工具

在不同的环境下,程序可能因为处于不同的环境无法正常运行, docker能把 程序 + 依赖环境 一起打包成一个标准的“盒子”(镜像),然后在任何地方都能运行(容器),容器就是镜像的动态实例.

组成部分

docker主要有四部分:

镜像 (Image)
相当于一个“安装包”或者“模版”。里面写明了操作系统、依赖库、程序文件。

容器 (Container)
镜像运行后的实例,就像“安装包”安装出来并运行的程序。容器是活的,可以改动、运行、停止、删除。

Dockerfile
就是一份“说明书”,写清楚镜像怎么制作。

仓库 (Registry)
存放镜像的地方,比如:

基础操作

1.查看本地镜像

1
docker images

image

2.构造镜像

生成一个镜像 (Image),存在于本地的 Docker 镜像库里。

1
docker build -t <镜像名[:tag]> (构建上下文目录)

image

3.上传镜像

1
docker push <IMAGE>([<仓库名>/]<命名空间>/<REPO>:<TAG>)

image

4.查看本地镜像

1
docker images

image

5.删除镜像

1
docker rmi -<版本号>

image

pwn部署

首先要创建自己的阿里云

image

image

这些操作好之后在虚拟机中执行以登录自己的阿里云账号(一般登陆一次之后会一直保持登录状态)

image配置代理

1.开启小猫的Allow LAN (允许局域网连接)

image

默认情况下,Clash 只监听 本机回环地址(127.0.0.1:7890),只有 Windows 自己能用代理。勾选了 Allow LAN,Clash 会监听 0.0.0.0:7890,也就是允许 局域网内其他设备(虚拟机、Docker 容器、手机等)通过你的电脑的 IP 地址来使用代理

2.然后去查看Windows 宿主机上的虚拟网卡

1
ipconfig.exe

image

3.文本编辑器打开,写入

1
sudo vim /usr/bin/dockerproxy

4.改宿主机ip和端口输入

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
#!/bin/bash

# Docker 代理管理脚本
# 使用方法: sudo ./docker-proxy.sh [set|unset] [proxy_address]

set -e

# 默认代理地址
DEFAULT_PROXY="网卡:7890"
PROXY_DIR="/etc/systemd/system/docker.service.d"
PROXY_CONF="$PROXY_DIR/http-proxy.conf"

# 显示使用说明
usage() {
echo "使用方法: $0 [set|unset] [proxy_address]"
echo " set [proxy_address] - 设置 Docker 代理 (默认: $DEFAULT_PROXY)"
echo " unset - 取消 Docker 代理配置"
exit 1
}

# 检查是否以 root 权限运行
check_root() {
if [ "$EUID" -ne 0 ]; then
echo "请使用 sudo 或以 root 权限运行此脚本"
exit 1
fi
}

# 设置 Docker 代理
set_proxy() {
local proxy_addr=${1:-$DEFAULT_PROXY}

echo "正在设置 Docker 代理: $proxy_addr"

# 创建配置目录
mkdir -p "$PROXY_DIR"

# 创建代理配置文件
cat > "$PROXY_CONF" << EOF
[Service]
Environment="HTTP_PROXY=http://$proxy_addr"
Environment="HTTPS_PROXY=http://$proxy_addr"
Environment="NO_PROXY=localhost,127.0.0.1,.docker.internal,.hubproxy.docker.internal"
EOF

# 重新加载配置并重启 Docker
systemctl daemon-reload
systemctl restart docker

echo "Docker 代理设置完成"
echo "当前代理配置:"
systemctl show --property=Environment docker
}

# 取消 Docker 代理配置
unset_proxy() {
echo "正在取消 Docker 代理配置"

# 删除代理配置文件
if [ -f "$PROXY_CONF" ]; then
rm -f "$PROXY_CONF"
echo "已删除代理配置文件: $PROXY_CONF"
else
echo "未找到代理配置文件: $PROXY_CONF"
fi

# 重新加载配置并重启 Docker
systemctl daemon-reload
systemctl restart docker

echo "Docker 代理配置已取消"
echo "当前环境变量:"
systemctl show --property=Environment docker
}

# 主程序
main() {
check_root

case "$1" in
set)
set_proxy "$2"
;;
unset)
unset_proxy
;;
*)
usage
;;
esac
}

# 执行主程序
main "$@"

然后赋执行权限

1
sudo chmod +x /usr/bin/dockerproxy
  • 网卡(模糊化处理)→ 宿主机的 IP(在虚拟网络环境下 VM/容器可达的地址)
  • 7890 → 代理软件提供的服务端口(通常是 HTTP/HTTPS 代理,常见于 Clash)
  • 作用:让 Docker 的网络请求走代理,加速/绕过网络限制。
1
DEFAULT_PROXY="网卡:7890"

在宿主机(Windows)上跑 Clash,开了一个代理:

但是在 Kali 虚拟机里跑 Docker,要让 Docker 用这个代理:

  • 在 VM 里写 127.0.0.1:7890 是不对的,因为那是 VM 自己。
  • 要写宿主机在 VM 眼中的地址,比如 网卡:7890。这样 Docker 请求才会正确发到宿主机的代理。

使用

1
2
sudo dockerproxy set#使用代理
sudo dockerproxy unset#取消代理

image

也可以自定义代理

1
sudo dockerproxy set 172.27.16.1:7890

验证是否走代理

1
docker info | grep -i proxy

image

HTTP Proxy / HTTPS Proxy → Docker Daemon 的全局网络请求会走 Windows 宿主机上的 Clash 代理

No Proxy → 这些地址不走代理(本机回环和 Docker 内部域名)

(warning是宿主机内核缺少 blkio(块设备限速)的支持,跟代理没关系,可以忽略)

镜像操作

1.先要拉取镜像

1
2
3
4
docker pull ubuntu:22.04
docker pull ubuntu:20.04
docker pull ubuntu:18.04
docker pull ubuntu:16.04

很多时候,Dockerfile 里开头写的是:

1
FROM ubuntu:22.04

那么在 docker build 时,如果本地没有 ubuntu:22.04,Docker 就会自动去拉。

这个操作其实就是提前把它保存在本地,因为它也需要配置代理,刚好测试你的 代理配置是否生效

2.从Github上下载打包好的项目

链接(也需要链接代理)

然后把对应版本的附件重命名之后替换src中的文件就好了

image

3.最后就是build镜像

image

push上去

image

之后在镜像库里就可以找到这个镜像了

image

最后把这个镜像的完整引用放入网站就可以了

image

image

image

 请作者喝杯咖啡
 Comments
Comment plugin failed to load
Loading comment plugin
Powered by Hexo & Theme Keep
Unique Visitor Page View