amazon-web-services - 在 AWS 自动扩展组中启动 EC2 时,如何运行简单的 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 docs和您发布的内容中,可能的原因是您缺少/bin/bash
以下内容docker_run.sh
:
用户数据 shell 脚本必须以 #! 字符和要读取脚本的解释器的路径(通常是 /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
实例是否有错误。
推荐阅读
- docker - 在 Ubuntu 虚拟机中访问 Docker 容器端口
- powershell - ISE 中的 MyInvocation.MyCommand.Path 与常规 PS
- saxon - 将大型 XML 文件(超过 3G)转换为逗号分隔文件
- java - RestTemplate Swagger 没有足够的变量值可扩展
- python - 为什么当月的第一天在 matplotlib.plot_date 中自动绘制为刻度?
- c# - 为 Identity Server 4 创建日志
- c++ - 内存中的字符数组表示
- https - 调试自托管 https 连接问题的任何好方法?
- ios - 从 UITableViewCell 到 UIViewController 的转场不起作用(准备转场未调用)
- android - 构建我的android项目时无法合并dex错误