DVWA Docker多架构支持:amd64/arm64镜像构建教程
【免费下载链接】DVWA 项目地址: https://gitcode.com/gh_mirrors/dvw/DVWA
为什么需要多架构支持?
随着Apple Silicon芯片和ARM服务器的普及,安全测试工具需要跨架构运行能力。DVWA作为Web安全学习的经典靶场,通过Docker多架构镜像可以让开发者在x86服务器、M1/M2 Mac或ARM开发板上获得一致的漏洞测试体验。
准备工作
环境要求
- Docker Engine 20.10+
- Docker Compose v2+
- Git
获取源码
git clone https://gitcode.com/gh_mirrors/dvw/DVWA
cd DVWA
原Dockerfile架构分析
查看项目根目录的Dockerfile,当前基础镜像使用单一架构:
FROM docker.io/library/php:8-apache
这种配置只能构建amd64架构镜像,在ARM设备上会出现"exec format error"。
多架构构建方案
1. 修改Dockerfile
使用Docker Manifest List特性,创建支持多架构的构建文件:
# 多架构构建基础镜像
ARG TARGETARCH
FROM docker.io/library/php:8-apache-${TARGETARCH}
LABEL org.opencontainers.image.source=https://gitcode.com/gh_mirrors/dvw/DVWA
LABEL org.opencontainers.image.description="DVWA multi-architecture image"
LABEL org.opencontainers.image.licenses="gpl-3.0"
WORKDIR /var/www/html
# 架构适配的依赖安装
RUN apt-get update \
&& export DEBIAN_FRONTEND=noninteractive \
&& apt-get install -y zlib1g-dev libpng-dev libjpeg-dev libfreetype6-dev iputils-ping \
&& apt-get clean -y && rm -rf /var/lib/apt/lists/* \
&& docker-php-ext-configure gd --with-jpeg --with-freetype \
&& docker-php-ext-install gd mysqli pdo pdo_mysql
COPY --chown=www-data:www-data . .
COPY --chown=www-data:www-data config/config.inc.php.dist config/config.inc.php
2. 配置构建器
# 创建多架构构建器
docker buildx create --name dvwa-builder --use
# 启动构建器
docker buildx inspect --bootstrap
3. 构建多架构镜像
# 构建并推送到本地仓库
docker buildx build \
--platform linux/amd64,linux/arm64 \
-t dvwa:multiarch \
--load .
Docker Compose部署
修改compose.yml文件支持多架构部署:
volumes:
dvwa:
networks:
dvwa:
services:
dvwa:
build:
context: .
platforms:
- linux/amd64
- linux/arm64
image: dvwa:multiarch
pull_policy: never # 使用本地构建镜像
environment:
- DB_SERVER=db
depends_on:
- db
networks:
- dvwa
ports:
- 127.0.0.1:4280:80
restart: unless-stopped
db:
image: docker.io/library/mariadb:10
# 数据库也使用多架构镜像
platform: ${TARGETPLATFORM:-linux/amd64}
environment:
- MYSQL_ROOT_PASSWORD=dvwa
- MYSQL_DATABASE=dvwa
- MYSQL_USER=dvwa
- MYSQL_PASSWORD=p@ssw0rd
volumes:
- dvwa:/var/lib/mysql
networks:
- dvwa
restart: unless-stopped
验证架构支持
启动服务后验证架构信息:
# 启动服务
docker compose up -d
# 检查容器架构
docker inspect dvwa-dvwa-1 | grep Architecture
正确输出应为:
"Architecture": "amd64" # 或 "arm64"
常见问题解决
1. ARM架构下GD库安装失败
修改Dockerfile中依赖安装部分,ARM架构需要额外处理:
# ARM架构特殊处理
RUN if [ "${TARGETARCH}" = "arm64" ]; then \
apt-get install -y libjpeg62-turbo-dev; \
fi
2. 数据库连接问题
确保config/config.inc.php中的数据库配置与compose环境变量匹配:
$_DVWA['db_server'] = getenv('DB_SERVER') ?: 'localhost';
$_DVWA['db_database'] = 'dvwa';
$_DVWA['db_user'] = 'dvwa';
$_DVWA['db_password'] = 'p@ssw0rd';
总结
通过Docker Buildx和多架构基础镜像,我们实现了DVWA在amd64和arm64架构的无缝支持。这种方案可以扩展到更多架构(如ppc64le、s390x),满足不同安全测试环境的部署需求。完整配置文件可参考项目docker-compose.yml和Dockerfile。
下一步
- 测试在树莓派4B(arm64)上的性能表现
- 添加linux/arm/v7架构支持
- 实现CI/CD自动构建多架构镜像
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



