【问题标题】:How to run a simple Docker container when an EC2 is launched in an AWS auto-scaling group?在 AWS 自动扩展组中启动 EC2 时,如何运行简单的 Docker 容器?
【发布时间】:2021-04-16 20:14:17
【问题描述】:
$ 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...'

【问题讨论】:

  • 你能澄清一下是什么实例吗?你在上面安装和配置过docker吗?
  • @Marcin,“什么实例”是什么意思?它是一个 EC2 实例 t2.micro,由自动扩展组创建。是的,我可以 ssh 到实例并执行 docker ... 命令,当然包括我的 docker run... 命令。
  • 标准 Amazon Linux 2 实例未预装 docker。因此不清楚您使用的是哪个具有 docker 内置的实例?另外,您是否检查了/var/log/cloud-init-output.log 的 UserData 错误?
  • @Marcin,我已经在我使用的 AMI 中配置了 Docker。就像我说的,我可以简单地通过 ssh 进入 EC2 实例并执行docker... 命令。
  • 我在 /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...'

标签: amazon-web-services docker amazon-ec2 terraform terraform-provider-aws


【解决方案1】:

来自AWS docs,您发布的可能原因是您在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 是否有错误。

【讨论】:

  • 马尔辛,你这个男人!这太明显了,我错过了。谢谢!
  • @ChrisF 没问题。一开始我也没有注意到这一点:-)
猜你喜欢
  • 2018-04-27
  • 2018-06-24
  • 2017-05-28
  • 2023-03-30
  • 2014-09-27
  • 2015-08-21
  • 1970-01-01
  • 2019-12-05
  • 2020-11-28
相关资源
最近更新 更多