文档首页> IDC服务> 查看docker run命令

查看docker run命令

发布时间:2025-06-23 00:03       

以下是关于查看 docker run 命令的完整指南,涵盖历史记录查询、容器反解析及监控方法:


🔍 一、查看历史执行记录

1. 通过Shell历史查询

history | grep "docker run"
# 精确搜索(支持时间戳)
HISTTIMEFORMAT="%F %T " history | grep -C 5 "docker run"
​

2. 审计日志查询(需启用auditd)

sudo ausearch -k docker_run | aureport -i
​

✅ 输出示例:
time->Tue Jun 25 14:30:22 2023, type=PROCTITLE cmdline="docker run -d nginx"


🐳 二、从运行容器反推启动命令

方法1:使用 docker inspect 解析

docker inspect --format='{{range .Config.Cmd}}{{.}} {{end}}' 容器ID
​

关键参数提取:

# 提取完整命令
echo "docker run $(docker inspect -f \
'{{.HostConfig.Binds}} {{.HostConfig.PortBindings}} \
{{.Config.Image}} {{join .Args " "}}' 容器ID | \
sed 's/map\[//g; s/]//g')"
​

方法2:使用 runlike 工具(推荐)

# 安装
pip3 install runlike

# 还原命令
runlike -p 容器ID
​

💡 输出示例:
docker run --name=nginx -p 80:80 -v /data:/app nginx:alpine


⚙️ 三、实时监控docker run执行

1. 使用 ctop 容器监控

# 安装
sudo wget https://github.com/bcicen/ctop/releases/download/v0.7.7/ctop-0.7.7-linux-amd64 -O /usr/local/bin/ctop
sudo chmod +x /usr/local/bin/ctop

# 监控命令
ctop -f "docker run"
​

2. 通过 sysdig 捕获

# 捕获命令
sudo sysdig -c spy_users "proc.name contains 'docker' and evt.type=execve"
​

🔍 输出字段:
UIDPID``COMMARGS


📂 四、从持久化记录查询

1. Docker日志审计(需配置)

# 创建审计规则
echo "-w /usr/bin/docker -k docker_cmds" | sudo tee -a /etc/audit/rules.d/docker.rules
sudo service auditd restart

# 查询记录
ausearch -k docker_cmds | grep "docker run"
​

2. 系统日志检索

sudo journalctl -u docker.service | grep "run"
​

🛠 五、容器启动命令重建流程

 
 
 
 
 
 
 
运行容器
获取容器ID
docker inspect 容器ID
解析关键参数
重建网络配置
重建存储卷
重建环境变量
拼接完整命令

⚠️ 六、注意事项

  1. 权限限制
    • 普通用户无法查看其他用户的 history
    • 需 sudo 权限访问系统日志
  2. 临时容器
    --rm 参数启动的容器退出后无法反查
  3. 安全风险
    ❌ 避免在命令中暴露敏感信息:
    docker run -e MYSQL_ROOT_PASSWORD=123456 mysql # 高危操作!
    ​
  4. 命令截断问题
    超长命令可能在日志中被截断,需检查:
    getconf ARG_MAX # 查看系统参数限制(通常2MB)
    ​

💡 七、最佳实践

  1. 基础设施即代码
    改用 docker-compose.yml 或 Kubernetes 声明式部署:
    services:
      web:
        image: nginx:alpine
        ports:
          - "80:80"
    ​
  2. 命令标准化
    使用包装脚本记录执行:
    #!/bin/bash
    echo "[$(date)] $@" >> /var/log/docker_cmds.log
    docker "$@"
    ​
  3. 审计强化
    # 记录所有docker命令到syslog
    echo "export PROMPT_COMMAND='history -a >(logger -t \"[DOCKER_CMD]\" -p local6.info)'" >> /etc/profile
    ​

通过上述方法,可有效追溯 docker run 命令。生产环境建议启用 Docker 审计日志并配合 ELK 等工具集中管理,同时遵循最小权限原则控制命令访问。