我已经就同样的问题联系了 AWS Support 人员。他们的回应如下:
不幸的是,VMIE 不支持导入 Docker 映像。由于 Docker 映像不是完全虚拟化的操作系统,因此即使导入成功,您也无法启动到该映像。
通过运行用户数据有一个更简单的解决方案。就在容器内运行的代码而言,容器或虚拟机之间没有区别。该代码认为它在常规操作系统上运行。因此,您可以使用用户数据脚本在实例上执行相同的操作,而不是使用 Dockerfile 创建 docker 容器。例如,使用 Dockerfile 中的 ADD,它会获取文件并将它们写入容器。我们可以从 S3 中提取此文件,并将其复制到实例需要去的任何地方。它将位于与容器中相同的位置。docker 文件中的 RUN 指令将与用户数据脚本一对一映射,因为这些只是命令。对于 CMD 指令,我们可以简单地通过用户数据运行该进程。Docker 卷无关紧要,因为我们可以访问实例的完整存储空间,所以您可以忽略卷的创建,而只需将任何文件写入任何需要去的地方。总之,您的用户数据脚本将替换 Dockerfile 以引导您的实例并运行您的应用程序。您将使用 Bash 语法,而不是 Dockerfile 语法。在下面查看模仿 Dockerfile 的示例脚本。
#! /bin/bash
pip install --upgrade --user awscli
sudo aws s3 cp s3://example-bucket/hello /
sudo chmod +x /hello /hello
以下是脚本正在执行的操作的细分:
确保安装了 aws cli
从 S3 存储桶中提取文件“hello”,并将其写入“/”
确保文件“hello”是可执行的
执行 hello 这本质上是 Dockerfile 在容器中所做的事情,但是它不是从 S3 拉取,而是从 Dockerfile 的位置拉取它。将文件添加到 S3 后,您可以轻松地将其拉入用户数据脚本。运行它,您甚至不需要创建自定义 AMI,因为引导是在启动后在实例上完成的。要选择适当的操作系统,您可以启动 QuickStart Ubuntu AMI 并添加此用户数据脚本。此外,您可以继续使用 Docker 进行测试而不会出现问题,您只需要确保文件“hello”在您的 Docker 位置和 S3 存储桶之间同步。您可以使用 S3 Sync 命令来完成此操作。