Kali Linux Docker Compose 部署指南
在 Kali Linux Rolling 上安装 docker-compose-plugin 插件,编写 nginx + redis 的 docker-compose.yml 并用 docker compose 完成 config、up、ps、logs、exec、top、port、down 全流程实测,所有回显均为 Kali Rolling 实测结果
Kali Linux Docker Compose 部署指南
目标:在 Kali Linux Rolling 上安装 docker-compose-plugin 插件,编写 nginx + redis 的 docker-compose.yml 并完成 config、up、ps、logs、exec、top、port、down 全流程。所有命令与回显均为 Kali Rolling 实测结果。
一、环境信息
- 操作系统:Kali GNU/Linux Rolling(
VERSION_ID=2026.3,VERSION_CODENAME=kali-rolling) - Docker:Docker CE
29.7.2(docker-ce 5:29.7.2-1debian.13trixie) - Compose:docker-compose-plugin
5.5.0-1~debian.13~trixie,docker compose version显示v5.5.0 - 项目目录:/opt/docker/
二、Compose 概览
docker compose 是 Docker 官方的多服务编排命令(V2 插件形式,随 CLI 安装):
docker compose version
Docker Compose version v5.5.0
一个 YAML 文件声明多个服务及其网络、端口、数据卷、重启策略,docker compose up -d 一键创建并启动,down 一键清理。
三、安装
随 docker-ce 套件一起安装 docker-compose-plugin 插件:
apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
docker-compose-plugin 5.5.0-1~debian.13~trixie amd64 [installed]
卸载(可选):
apt-get remove -y docker-compose-plugin
四、编写 docker-compose.yml
创建项目目录并编写编排文件:
mkdir -p /opt/docker/data
cat > /opt/docker/docker-compose.yml <<'EOF'
services:
web:
image: nginx:latest
ports:
- "80:80"
volumes:
- /opt/docker/data:/usr/share/nginx/html
restart: always
redis:
image: redis:7-alpine
volumes:
- /opt/docker/data:/data
restart: always
EOF
| 字段 | 说明 |
|---|---|
| image | 使用的镜像与标签,未本地命中时自动拉取 |
| ports | 端口映射,80:80 即宿主机 80 端口转发到服务 80 端口 |
| volumes | 数据卷挂载,宿主机 /opt/docker/data 挂到服务内路径 |
| restart | 重启策略,always 表示异常退出/开机后自动拉起 |
五、常用命令实战
1. config 校验
cd /opt/docker && docker compose config
name: docker
services:
redis:
image: redis:7-alpine
networks:
default: null
restart: always
volumes:
- type: bind
source: /opt/docker/data
target: /data
bind: {}
web:
image: nginx:latest
networks:
default: null
ports:
- mode: ingress
target: 80
published: "80"
protocol: tcp
restart: always
volumes:
- type: bind
source: /opt/docker/data
target: /usr/share/nginx/html
bind: {}
networks:
default:
name: docker_default
💡 config 会把 YAML 展开为完整规范结构,语法错误会在此步报出。
2. up -d 后台启动
cd /opt/docker && docker compose up -d
Network docker_default Created
Container docker-web-1 Creating
Container docker-redis-1 Creating
Container docker-web-1 Created
Container docker-redis-1 Created
Container docker-web-1 Starting
Container docker-redis-1 Starting
Container docker-web-1 Started
Container docker-redis-1 Started
3. ps 查看运行状态
docker compose ps
NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
docker-redis-1 redis:7-alpine "docker-entrypoint.s…" redis 12 seconds ago Up 5 seconds 6379/tcp
docker-web-1 nginx:latest "/docker-entrypoint.…" web 12 seconds ago Up 5 seconds 0.0.0.0:80->80/tcp, [::]:80->80/tcp
4. logs 查看日志
docker compose logs web
web-1 | /docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
web-1 | /docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
web-1 | /docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
web-1 | 10-listen-on-ipv6-by-default.sh: info: Getting the checksum of /etc/nginx/conf.d/default.conf
web-1 | /docker-entrypoint.sh: Sourcing /docker-entrypoint.d/15-local-resolvers.envsh
5. exec 进入服务执行命令
docker compose exec web sh -c "echo kali-compose-ok"
kali-compose-ok
6. top 查看进程
docker compose top
SERVICE # UID PID PPID C STIME TTY TIME CMD
redis 1 999 8461 8402 1 11:11 ? 00:00:00 redis-server *:6379
web 1 root 8462 8425 0 11:11 ? 00:00:00 nginx: master process nginx -g daemon off;
web 1 101 8565 8462 0 11:11 ? 00:00:00 nginx: worker process
web 1 101 8566 8462 0 11:11 ? 00:00:00 nginx: worker process
7. port 查看端口映射
docker compose port web 80
0.0.0.0:80
8. 数据卷验证与 HTTP 访问
echo "<h1>kali hello</h1>" > /opt/docker/data/index.html
curl -s -o /dev/null -w "HTTP %{http_code}\n" http://localhost/
HTTP 200
💡 未放 index.html 前访问返回 HTTP 403(挂载目录为空);放入文件后返回 200,证明 /opt/docker/data 已挂载到 nginx 站点目录。
9. down 停止并清理
docker compose down
Container docker-redis-1 Stopped
Container docker-redis-1 Removing
Container docker-redis-1 Removed
Container docker-web-1 Removed
Network docker_default Removing
Network docker_default Removed
六、常见问题与真实行为
-
首次 up 拉取镜像慢/超时:需先在
/etc/docker/daemon.json中写入registry-mirrors配置镜像加速,否则 Docker Hub 国内访问不稳定。修改后执行systemctl restart docker生效。 -
restart: always 不生效:该策略由守护进程接管,
docker compose down会显式停止;仅进程异常退出时自动重启。 -
端口占用冲突:
80:80映射要求宿主机 80 端口空闲,冲突时报port is already allocated,改映射或换端口。 -
volumes 权限问题:挂载目录不存在时 compose 会自动创建(root 属主),需要 nginx 可读时用
chmod调整。
七、命令速查表
| 命令 | 作用 |
|---|---|
| docker compose config | 校验并展开编排文件 |
| docker compose up -d | 后台创建并启动全部服务 |
| docker compose ps | 查看服务状态 |
| docker compose logs [服务] | 查看日志 |
| docker compose exec <服务> <命令> | 在服务内执行命令 |
| docker compose top | 查看服务内进程 |
| docker compose port <服务> <端口> | 查看端口映射 |
| docker compose down | 停止并删除服务与网络 |
| docker compose restart / stop / start | 重启 / 停止 / 启动 |