docker使用指南
使用Docker搭建CTF Pwn做题环境
为了保证利用脚本能够正常打通,
我们通常需要在本地准备相同的运行环境,
并且在远程利用之前先在本地进行测试
如果为每个不同的运行环境都单独准备一个Ubuntu虚拟机,
则太不优雅了
Docker
操作系统层面上的虚拟化方案
能够非常便捷地搭建不同pwn题所对应的原始环境
[!note] 对比虚拟机
硬件层面的虚拟化方案
Docker使用
Docker入门教程(非常详细)从零基础入门到精通,看完这一篇就够了_docker教程-CSDN博客
Environment - CTF Wiki
1 |
|
网络问题
ping 命令不走配置代理的原因
通过配置代理是不能影响ping命令的。大家都知道ping命令是直接使用icmp协议来检测网址是否可达的。而我们配置的代理是直接配置了http代理。
Http是应用层协议,icmp是网络层协议。配置代理过程是配置了应用层协议,是不会影响网络层协议的,也就解释了设置http代理以后在终端还是ping不通Google
可以用curl
问题:
查看docker占用的存储空间
1 |
|
清除build cache缓存
1 |
|
重启docker服务
1 |
|
真神解决方案:
从Docker拉取镜像一直失败超时?这些解决方案帮你解决烦恼_docker拉取镜像超时-CSDN博客
我采用的方案二:
使用代理拉取镜像:
一、 创建配置文件
1 |
|
二、在配置文件中添加代理
1 |
|
三、重启docker
1 |
|
四、查看环境变量
1 |
|
终于搞好了,泪目
swap file
查看已有镜像
1 |
|
构建镜像
1 |
|
需指定tag(镜像名称)和构建上下文
创建并启动容器
守卫模式(后台运行)
映射端口
命名容器
挂载目录
镜像名
1 |
|
在已经运行的容器中执行命令 指定工作目录
设置环境变量TERM(显示相关)
指定容器用户
-i 交互模式 -t 分配伪终端(用于交互式会话) 并指定目标容器
启动bash
1 |
|
使用ssh连接入容器环境
1 |
|
1 |
|
docker常用命令
停止容器
1 |
|
启动容器
1 |
|
查看容器
1 |
|
删除容器
1 |
|
查看镜像列表
1 |
|
删除镜像
1 |
|
docker pull可以成功但是docker build失败的奇怪问题
docker build
和 docker pull
的行为不同
**
docker pull
**:- 直接从 Docker Hub 拉取镜像到本地。
- 如果网络连接正常,且镜像可以被成功解析和下载,
docker pull
通常不会有问题。
**
docker build
**:- 在构建过程中,Docker 会尝试解析
Dockerfile
中的FROM
指令,并从 Docker Hub 拉取基础镜像。 - 如果 Docker 守护进程的网络配置(如代理、DNS)有问题,可能导致
docker build
无法解析或拉取镜像,即使docker pull
可以成功。
- 在构建过程中,Docker 会尝试解析
在sudo vim /etc/docker/daemon.json
设置dns方法是不行的(8.8.8.8和8.8.4.4)仅5s就error 显示报错connection reset
但是上文方法二配置代理的方法还是有用的
配置代理后,docker pull可以成功(否则不能成功)
然后再docker build即可成功
补:今天尝试在Dockerfile文件前面开头处添加配置代理即可直接build过程中拉取成
(看我放的位置,其实和它没关系)
再补:
并非,去掉之后也能拉取成功,看来直接build得看运气
pwndocker
skysider/pwndocker
关于pwn题的环境
目前我所已知的三种较为推荐的方式:将本地环境和远程环境相统一
patchelf + glibc-all-in-one
更改pwn题libc在脚本中打开本地进程这么写
1
process(["ld路径“, "./题目"], env={"LD_PRELOAD":"libc路径"})
docker pwndocker
如何优雅的给 Docker 配置网络代理 - CharyGao - 博客园
Docker网络模式
docker容器内的网络问题
我的层次结构是
windows -> ubuntu(wsl2) -> ubuntu(docker)
(docker用的是linux版docker)
windows上有代理服务
我实在没搞好怎么在docker桥接模式下走代理
于是我使用host模式
终于搞好:
docker网络问题总结
docker网络问题中的三个代理:
系统代理 docker拉取镜像时不会自动使用系统的代理设置,如果需要通过代理拉取镜像,需要手动配置 Docker 的代理设置。
docker拉取镜像时走的代理 /etc/systemd/system/docker.service.d/http-proxy.conf
中设置(/etc/docker/daemon.json
可能也可以)
docker容器走的代理 和docker网络模式有关
以上。