docker 配置与调试

414 阅读2分钟

这是我参与8月更文挑战的第7天,活动详情查看:8月更文挑战

1. docker 配置路径

1.1 存储位置

可以使用 docker system info | grep "Root Dir" 查看当前使用的存储位置。

与 Docker 相关的本地资源默认存放在 /var/lib/docker/ 目录下,以 aufs 文件系统为例,其中:

  • container 目录存放容器信息
  • graph 目录存放镜像信息
  • aufs 目录下存放具体的镜像层文件

1.2 配置文件

使用 systemd 的系统(如 Ubuntu 16.04、Centos 7/8 等)的配置文件在 /etc/docker/daemon.json

daemon.json 是 docker 的详细配置文件,一般不需要修改

2. 开启 Docker 调试模式

在 docker 配置文件 daemon.json 中添加

{
  "debug": true
}

重启守护进程

方法1

sudo systemctl daemon-reload
sudo systemctl restart docker

方法2

$ sudo kill -SIGHUP $(pidof dockerd)

根据控制台打印的日志信息,一旦执行成功后,表示开启了 docker 调试模式

3. 镜像调试

在构建镜像时,经常会遇到镜像构建失败的问题。此时只能通过镜像调试的方式查找镜像的构建脚本 Dockefile 哪儿出问题了,例如下图所示:

img

在执行第三层 Step 3 时,出现了 /bin/sh: /bin/bash: not found 的错误,此时可以通过如下步骤解决该问题:

1、进入之前构建成功的临时镜像

如上图所示进入到前面一个执行成功的指令中获取到的临时镜像 22d31cc52b3e

通过 docker run -it 22d31cc52b3e 创建并启动临时镜像的一个容器

2、手动执行指令

进入临时镜像的容器后,通过输入需要调用的下一个指令,从而找到镜像编译错误的原因。

即手动执行 step 3 步骤中需要执行的执行,从而发现问题并找到解决方案。最终将 step 3 步骤执行成功后,表示修复成功。再修改 Dockerfile 后重新构建镜像

4 容器调试

日志

$ docker logs [容器名]
# 查看 N 行日志
$ docker logs -n 100 [容器名]

attach 实时查看stdout

$ docker attach CONTAINER 

默认会绑定 stdin,代理 signals

如果你 ctrl-c 容器通常会退出。很多时候大家并不想这样,只是想分离开,可以ctrl-p ctrl-q