【发布时间】:2016-12-24 13:18:16
【问题描述】:
我正在尝试使用 AWS CLI 从我安装了 Docker 的映像启动 EC2 实例,然后为该实例提供 --user-data 传入的脚本以从 docker hub 拉取映像并运行该图像。我的 AWS CLI 命令启动实例,但似乎传递给 --user-data 的脚本从未运行。
CLI 命令是:
aws ec2 run-instances --image-id ami-xxxxx --count 1 --instance-type t2.micro --key-name xxxxx --security-groups xxxxxxx --user-data file:///Users/xxxxxx/startlb.sh
还有startlb.sh的内容:
#!/bin/bash
docker pull xxxxxx && docker run -p 9000:9000 -p 9090:9090 -d xxxxxxx go run lbserver.go > /home/ec2-user/startup.log
我将 docker 命令的输出重定向到 startup.log 以查看是否出现任何标准输出。当我登录到实例时,没有创建日志文件,这让我相信user-data 脚本永远不会运行。 docker images 和 docker ps 都显示实例上没有图像或容器。
该命令成功启动实例,只是没有拉取并运行docker容器(Docker默认运行在实例上,因此无需启动它)。启动实例后,如果我将脚本的内容粘贴到终端并执行它会拉取容器并运行它,因此脚本似乎没有任何问题。
【问题讨论】:
-
通过 AWS Web 控制台查看实例的用户数据时,用户数据内容是否正确显示? AMI 是否真的安装了 cloud-init 服务?
-
这个文件startlb.sh的权限是什么?
-
检查 cloud-init 日志(可能是
/var/log/cloud-init*)以查看脚本是否已运行但由于某种原因失败。 -
您确定拉动有效吗?我建议添加到您的脚本中:#!/usr/bin/env bash set -xe docker pull xxx docker run...(每个语句后的新行)
-
镜像下载后,如果停止再启动实例,它不会再次下载,对吧?它应该更快
标签: bash amazon-web-services docker amazon-ec2 aws-cli