docker-debug
是一个运行中的 docker
容器故障排查方案,
在运行中的 docker
上额外启动一个容器,并将目标容器的 pid
, network
, uses
, filesystem
和 ipc
命名空间注入到新的容器里,
因此,您可以使用任意故障排除工具,而无需在生产容器镜像中预先安装额外的工具环境。
安装 docker-debug
命令行工具
mac brew
brew install zeromake/docker-debug/docker-debug
下载二进制文件
使用 bash 或 zsh
# get latest tag
VERSION=`curl -w '%{url_effective}' -I -L -s -S https://github.com/zeromake/docker-debug/releases/latest -o /dev/null | awk -F/ '{print $NF}'`
# MacOS Intel
curl -Lo docker-debug https://github.com/zeromake/docker-debug/releases/download/${VERSION}/docker-debug-darwin-amd64
# MacOS M1
curl -Lo docker-debug https://github.com/zeromake/docker-debug/releases/download/${VERSION}/docker-debug-darwin-arm64
# Linux
curl -Lo docker-debug https://github.com/zeromake/docker-debug/releases/download/${VERSION}/docker-debug-linux-amd64
chmod +x ./docker-debug
sudo mv docker-debug /usr/local/bin/
# Windows
curl -Lo docker-debug.exe https://github.com/zeromake/docker-debug/releases/download/${VERSION}/docker-debug-windows-amd64.exe
使用 fish
# get latest tag
set VERSION (curl -w '%{url_effective}' -I -L -s -S https://github.com/zeromake/docker-debug/releases/latest -o /dev/null | awk -F/ '{print $NF}')
# MacOS Intel
curl -Lo docker-debug https://github.com/zeromake/docker-debug/releases/download/$VERSION/docker-debug-darwin-amd64
# MacOS M1
curl -Lo docker-debug https://github.com/zeromake/docker-debug/releases/download/$VERSION/docker-debug-darwin-arm64
# Linux
curl -Lo docker-debug https://github.com/zeromake/docker-debug/releases/download/$VERSION/docker-debug-linux-amd64
chmod +x ./docker-debug
sudo mv docker-debug /usr/local/bin/
# Windows
curl -Lo docker-debug.exe https://github.com/zeromake/docker-debug/releases/download/$VERSION/docker-debug-windows-amd64.exe
或者到 release page 下载最新可执行文件并添加到 PATH。
我们来试试吧!
# docker-debug [OPTIONS] CONTAINER COMMAND [ARG...] [flags]
docker-debug CONTAINER COMMAND
# More flags
docker-debug --help
# info
docker-debug info
Clone this repo and:
go build -o docker-debug ./cmd/docker-debug
mv docker-debug /usr/local/bin
docker-debug 使用 nicolaka/netshoot
作为默认镜像来运行额外容器。
你可以通过命令行 flag(--image)
覆盖默认镜像,或者直接修改配置文件 ~/.docker-debug/config.toml
中的 image
。
# 配置文件版本号
version = "0.7.4"
# 目标容器文件系统挂载点
mount_dir = "/mnt/container"
# 默认镜像
image = "nicolaka/netshoot:latest"
# 大多数docker操作的超时,默认为 10s。
timeout = 10000000000
# 默认使用哪个配置来连接docker
config_default = "default"
# docker 连接配置
[config]
# docker 默认连接配置
[config.default]
# docker 客户端版本指定默认 1.40
version = "1.40"
host = "unix:///var/run/docker.sock"
# 是否为 tls
tls = false
# 证书目录
cert_dir = ""
# 证书密码
cert_password = ""
- 在
docker
中查找镜像,没有调用docker
拉取镜像。 - 查找目标容器, 没找到返回报错。
- 通过自定义镜像创建一个容器并挂载
ipc
,pid
,network
,etc
,filesystem
。 - 在新容器中创建并运行
docker exec
。 - 在新容器中进行调试。
- 等待调试容器退出运行,把调试用的额外容器清理掉。
- kubectl-debug:
docker-debug
想法来自这个 kubectl 调试工具。 - Docker核心技术与实现原理:
docker-debug
的文件系统挂载原理来自这个博文。 - docker-engine-api-doc: docker engine api 文档。