如何在启动面向 Amazon ECS 优化的 AMI 时使用用户数据启用 Docker 调试模式?

上次更新时间:2019 年 4 月 26 日

我需要在某个 Amazon Elastic Container Service (Amazon ECS) 容器实例启动后立即排查问题。如何在启动面向 Amazon ECS 优化的 Amazon 系统映像 (AMI) 时使用用户数据启用 Docker 调试模式?

简短描述

要在实例启动时对 Amazon Elastic Compute Cloud (Amazon EC2) 实例进行配置,通常会使用 Amazon EC2 用户数据中的脚本来执行。此脚本将在其他服务启动时由 cloud-init 并发执行。有关更多信息,请参阅 cloud-init 文档中的用户数据格式。Cloud-init 提供了一种机制(称为“云 boothook”)来运行必须在用户数据执行和服务启动之前完成的脚本。有关更多信息,请参阅 cloud-init 文档中的 Cloud Boothook。您可以使用此机制来使 Docker 守护程序配置在 Docker 守护程序服务启动前到位。

在开始之前,请考虑以下事项:

  • 在您的容器实例启动后立即开始排查问题。
  • 请勿添加脚本以修改 OPTIONS 变量,因为重新启动 Docker 守护程序可能会干扰实例的启动、注册或存储设置进程或创建某个竞争条件。

解决方法

启用 Docker 调试模式

1.    使用云 boothook 更新您的 Docker 守护程序配置文件 /etc/sysconfig/docker。有关更多信息,请参阅 cloud-init 文档中的 Cloud Boothook

2.    要在 Docker 守护程序启动前启用 Docker 调试模式,请将 -D 旗标添加到 /etc/sysconfig/docker 中的 OPTIONS 变量中。使用 cloud-init-per 实用程序 来获取云 boothook,以仅运行一次。请参阅以下示例:

#cloud-boothook
#!/bin/bash

cloud-init-per once docker_debug echo 'OPTIONS="-D"' >> /etc/sysconfig/docker

使用云 boothook 传输现有用户数据

1.    使用 MIME 分段文件封装 boothook 和用户数据。

2.    串联封装的数据。

3.    将串联后的数据发送到 Amazon EC2 实例。

注意:要创建 mime-multipart 文件,请使用 write-mime-multipart 实用程序。此实用程序并未默认安装,而是包含在基于 Debian 和 RHEL 的分配的 cloud-utils 软件包中。有关更多信息,请参阅 Ubuntu 文档中的 write-mime-multipart 条目

请参阅以下示例:

Content-Type: multipart/mixed; boundary="==BOUNDARY=="
MIME-Version: 1.0

--==BOUNDARY==
Content-Type: text/cloud-boothook; charset="us-ascii"

#!/bin/bash
# Set Docker daemon options
cloud-init-per once docker_debug echo 'OPTIONS="-D"' >> /etc/sysconfig/docker

--==BOUNDARY==
Content-Type: text/x-shellscript; charset="us-ascii"

#!/bin/bash
# Set any ECS agent configuration options

cat >> /etc/ecs/ecs.config <<EOF
ECS_CLUSTER=my-ecs-cluster
ECS_LOGLEVEL=debug
EOF

--==BOUNDARY==--

这篇文章对您有帮助吗?

我们可以改进什么?


需要更多帮助?