4.2. 容器化服务故障排除
如果容器化服务在 overcloud 部署期间或之后失败,请使用以下建议来确定故障的根本原因:
在运行这些命令前,请检查您是否已登录到 overcloud 节点,而不是在 undercloud 上运行这些命令。
检查容器日志
每个容器都会保留其主进程的标准输出内容。此输出作为日志作用,可以帮助确定容器运行期间实际发生的情况。例如,要查看 keystone
容器的日志,请使用以下命令:
$ sudo docker logs keystone
在大多数情况下,此日志提供了容器失败的原因。
检查容器
在某些情况下,您可能需要验证容器的相关信息。例如,请使用以下命令来查看 keystone
容器的相关数据:
$ sudo docker inspect keystone
这提供了一个包含低级配置数据的 JSON 对象。您可以通过管道将这些输出内容传递给 jq
命令,以对特定数据进行解析。例如,要查看 keystone
容器的加载情况,请运行以下命令:
$ sudo docker inspect keystone | jq .[0].Mounts
您还可以使用 --format
选项将数据解析到一行中,这在针对一组容器数据运行命令时非常有用。例如,要重建用于运行 keystone
容器的选项,请使用包含 --format
选项的以下 inspect
命令:
$ sudo docker inspect --format='{{range .Config.Env}} -e "{{.}}" {{end}} {{range .Mounts}} -v {{.Source}}:{{.Destination}}{{if .Mode}}:{{.Mode}}{{end}}{{end}} -ti {{.Config.Image}}' keystone
--format
选项会按照 Go 语法来创建查询。
将这些选项与 docker run
命令结合使用来重新创建容器以进行故障排除:
$ OPTIONS=$( sudo docker inspect --format='{{range .Config.Env}} -e "{{.}}" {{end}} {{range .Mounts}} -v {{.Source}}:{{.Destination}}{{if .Mode}}:{{.Mode}}{{end}}{{end}} -ti {{.Config.Image}}' keystone ) $ sudo docker run --rm $OPTIONS /bin/bash
在容器内运行命令
在某些情况下,您可能需要通过特定的 Bash 命令从容器中获取信息。在这种情况下,使用以下 docker
命令在运行中的容器内执行命令。例如,要在 keystone
容器中运行命令:
$ sudo docker exec -ti keystone <COMMAND>
-ti
选项会通过交互式伪终端来运行命令。
将 <COMMAND
> 替换为您的所需命令。例如,每个容器都有一个健康检查脚本,用于验证服务的连接状况。您可以使用以下命令为 keystone
运行这个健康检查脚本:
$ sudo docker exec -ti keystone /openstack/healthcheck
要访问容器的 shell,请运行 docker exec
,将 /bin/bash
用作命令:
$ sudo docker exec -ti keystone /bin/bash
导出容器
当容器出现故障时,您可能需要调查文件中包含的所有内容。在这种情况下,您可以将容器的整个文件系统导出为 tar
归档。例如,要导出 keystone
容器的文件系统,请运行以下命令:
$ sudo docker export keystone -o keystone.tar
这个命令会创建 keystone.tar
归档,以供您提取和研究。