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 实测结果

kaliKali LinuxLinux系统2026/10/07

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

六、常见问题与真实行为

  1. 首次 up 拉取镜像慢/超时:需先在 /etc/docker/daemon.json 中写入 registry-mirrors 配置镜像加速,否则 Docker Hub 国内访问不稳定。修改后执行 systemctl restart docker 生效。

  2. restart: always 不生效:该策略由守护进程接管,docker compose down 会显式停止;仅进程异常退出时自动重启。

  3. 端口占用冲突:80:80 映射要求宿主机 80 端口空闲,冲突时报 port is already allocated,改映射或换端口。

  4. 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重启 / 停止 / 启动