当EC2在AWS自动缩放组中启动时,如何运行一个简单的Docker容器


$ terraform version
Terraform v0.14.4

我正在使用Terraform创建一个AWS自动缩放组,它通过同样由Terraform计划创建的启动模板成功地启动了EC2。我在启动模板中添加了以下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文档和您发布的内容,可能的原因是您的docker_run.sh:中缺少/bin/bash

用户数据外壳脚本必须以#开始!字符和要读取脚本的解释器的路径(通常为/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是否存在错误。

最新更新