如何在 AWS 自动缩放组中启动 EC2 时 运行 一个简单的 Docker 容器?
How to run a simple Docker container when an EC2 is launched in an AWS auto-scaling group?
$ terraform version
Terraform v0.14.4
我正在使用 Terraform 创建一个 AWS 自动缩放组,它通过启动模板成功启动了 EC2,该模板也是由相同的 Terraform 计划创建的。我在启动模板中添加了以下 user_data
定义。我正在使用的 AMI 已经配置了 Docker,并且具有我需要的 Docker 图像。
user_data = filebase64("${path.module/docker_run.sh}")
并且 docker_run.sh
文件包含简单的
docker run -p 80:3000 -d 1234567890.dkr.ecr.us-east-1.amazonaws.com/node-app:latest
但是,当我通过 ssh 连接到 EC2 实例时,容器不是 运行。我错过了什么?
更新:
根据 Marcin 的评论,我在 in /var/log/cloud-init-output.log
中看到以下内容
Jan 11 22:11:45 cloud-init[3871]: __init__.py[WARNING]: Unhandled non-multipart (text/x-not-multipart) userdata: 'docker run -p 80:3000 -d...'
来自 AWS docs 以及您发布的可能原因是您在 docker_run.sh
:
中缺少 /bin/bash
User data shell scripts must start with the #! characters and the path to the interpreter you want to read the script (commonly /bin/bash).
因此您的 docker_run.sh
应该是:
#!/bin/bash
docker run -p 80:3000 -d 1234567890.dkr.ecr.us-east-1.amazonaws.com/node-app:latest
如果仍然失败,请在实例上检查 /var/log/cloud-init-output.log
是否有错误。
$ terraform version
Terraform v0.14.4
我正在使用 Terraform 创建一个 AWS 自动缩放组,它通过启动模板成功启动了 EC2,该模板也是由相同的 Terraform 计划创建的。我在启动模板中添加了以下 user_data
定义。我正在使用的 AMI 已经配置了 Docker,并且具有我需要的 Docker 图像。
user_data = filebase64("${path.module/docker_run.sh}")
并且 docker_run.sh
文件包含简单的
docker run -p 80:3000 -d 1234567890.dkr.ecr.us-east-1.amazonaws.com/node-app:latest
但是,当我通过 ssh 连接到 EC2 实例时,容器不是 运行。我错过了什么?
更新:
根据 Marcin 的评论,我在 in /var/log/cloud-init-output.log
Jan 11 22:11:45 cloud-init[3871]: __init__.py[WARNING]: Unhandled non-multipart (text/x-not-multipart) userdata: 'docker run -p 80:3000 -d...'
来自 AWS docs 以及您发布的可能原因是您在 docker_run.sh
:
/bin/bash
User data shell scripts must start with the #! characters and the path to the interpreter you want to read the script (commonly /bin/bash).
因此您的 docker_run.sh
应该是:
#!/bin/bash
docker run -p 80:3000 -d 1234567890.dkr.ecr.us-east-1.amazonaws.com/node-app:latest
如果仍然失败,请在实例上检查 /var/log/cloud-init-output.log
是否有错误。