

# 引导启动 Amazon ECS Linux 容器实例以传递数据
<a name="bootstrap_container_instance"></a>

在启动 Amazon EC2 实例时，您可以将用户数据传递到 EC2 实例。数据可以用于执行常见的自动配置任务，甚至用于在实例启动时运行脚本。对于 Amazon ECS，最常见的用户数据使用案例是将配置信息传递到 Docker 进程守护程序和 Amazon ECS 容器实例。

您可以将多类用户数据传递到 Amazon EC2，其中包括云 boothook、Shell 脚本和 `cloud-init` 指令。有关这些和其他格式类型的更多信息，请参阅 [Cloud-Init 文档](https://cloudinit.readthedocs.io/en/latest/explanation/format.html)。

要在使用 Amazon EC2 启动向导时传递此用户数据，请参阅 [启动 Amazon ECS Linux 容器实例](launch_container_instance.md)。

您可以将容器实例配置为在容器代理配置或 Docker 进程守护程序配置中传递数据。

## Amazon ECS 容器代理
<a name="bootstrap_container_agent"></a>

当容器代理启动时，经 Amazon ECS 优化的 AMI的 Linux 变体将在 `/etc/ecs/ecs.config` 文件中查找代理配置数据。您可以在启动时使用 Amazon EC2 用户数据指定此配置数据。有关可用 Amazon ECS 容器代理配置变量的更多信息，请参阅 [Amazon ECS 容器代理配置](ecs-agent-config.md)。

若要仅设置一个代理配置变量（如集群名称），请使用 **echo** 将该变量复制到配置文件：

```
#!/bin/bash
echo "ECS_CLUSTER=MyCluster" >> /etc/ecs/ecs.config
```

如果您有多个变量要写入到 `/etc/ecs/ecs.config`，请使用以下 `heredoc` 格式。此格式会将以 **cat** 和 `EOF` 开头的行之间的所有内容写入到配置文件。

```
#!/bin/bash
cat <<'EOF' >> /etc/ecs/ecs.config
ECS_CLUSTER=MyCluster
ECS_ENGINE_AUTH_TYPE=docker
ECS_ENGINE_AUTH_DATA={"https://index.docker.io/v1/":{"username":"my_name","password":"my_password","email":"email@example.com"}}
ECS_LOGLEVEL=debug
ECS_WARM_POOLS_CHECK=true
EOF
```

要设置自定义实例属性，请设置 `ECS_INSTANCE_ATTRIBUTES` 环境变量。

```
#!/bin/bash
cat <<'EOF' >> ecs.config
ECS_INSTANCE_ATTRIBUTES={"envtype":"prod"}
EOF
```

## Docker 进程守护程序
<a name="bootstrap_docker_daemon"></a>

您可以使用 Amazon EC2 用户数据指定 Docker 进程守护程序配置信息。有关配置选项的更多信息，请参阅 [Docker 进程守护程序文档](https://docs.docker.com/reference/cli/dockerd/)。

**注意**  
AWS 不支持自定义 Docker 配置，因为它们有时可能会与未来的 Amazon ECS 更改或功能发生冲突，而不会发出警告。

在以下示例中，自定义选项添加到 Docker 进程守护程序配置文件中，`/etc/docker/daemon.json`，然后在启动实例时在用户数据中指定。

```
#!/bin/bash
cat <<EOF >/etc/docker/daemon.json
{"debug": true}
EOF
systemctl restart docker --no-block
```

在以下示例中，自定义选项添加到 Docker 进程守护程序配置文件中，`/etc/docker/daemon.json`，然后在启动实例时在用户数据中指定。此示例说明如何在 Docker 进程守护程序配置文件中禁用 docker-proxy。

```
#!/bin/bash
cat <<EOF >/etc/docker/daemon.json
{"userland-proxy": false}
EOF
systemctl restart docker --no-block
```