故障排除

以下是您在迁移到或使用 Docker 强化镜像 (DHI) 时可能遇到的常见问题以及推荐的解决方案。

一般调试

Docker 强化镜像经过优化,可提高安全性和运行时性能。因此,它们通常不包含 Shell 或标准调试工具。建议使用 Docker Debug 来排除基于 DHI 构建的容器的故障。

Docker Debug 允许您:

  • 将临时调试容器附加到现有容器。
  • 使用 Shell 和熟悉的工具,例如 curlpsnetstatstrace
  • 在会话结束后消失的可写、临时层中根据需要安装其他工具。

权限

DHI 默认以非 root 用户身份运行,以增强安全性。这可能会导致访问文件或目录时出现权限问题。确保您的应用程序文件和运行时目录归预期的 UID/GID 所有或具有适当的权限。

要了解 DHI 以哪个用户身份运行,请查看 Docker Hub 上该镜像的存储库页面。有关更多信息,请参阅查看镜像变体详细信息

特权端口

非 root 容器默认无法绑定到 1024 以下的端口。这由容器运行时和内核强制执行(尤其是在 Kubernetes 和 Docker Engine < 20.10 中)。

在容器内部,将应用程序配置为侦听非特权端口(1025 或更高)。例如,docker run -p 80:8080 my-image 将容器中的端口 8080 映射到主机上的端口 80,允许您在不需要 root 权限的情况下访问它。

无 Shell

运行时 DHI 省略了交互式 Shell,例如 shbash。如果您的构建或工具假定存在 Shell(例如,对于 RUN 指令),请在较早的构建阶段使用镜像的 dev 变体,并将最终工件复制到运行时镜像中。

要了解 DHI 包含哪些 Shell(如果有),请查看 Docker Hub 上该镜像的存储库页面。有关更多信息,请参阅查看镜像变体详细信息

此外,当您需要 Shell 访问正在运行的容器时,请使用Docker Debug

入口点差异

与 Docker 官方镜像 (DOI) 或其他社区镜像相比,DHI 可能定义了不同的入口点。

要了解 DHI 的 ENTRYPOINT 或 CMD,请查看 Docker Hub 上该镜像的存储库页面。有关更多信息,请参阅查看镜像变体详细信息

无软件包管理器

运行时 Docker 强化镜像经过精简,以提高安全性和最小化攻击面。因此,它们不包含软件包管理器,例如 apkapt。这意味着您无法直接在运行时镜像中安装其他软件。

如果您的构建或应用程序设置需要安装软件包(例如,编译代码、安装运行时依赖项或添加诊断工具),请在构建阶段使用镜像的 dev 变体。然后,仅将必要的工件复制到最终的运行时镜像中。

© . This site is unofficial and not affiliated with Kubernetes or Docker Inc.