" docker-machine rm"在不存在的EC2实例上失败

时间:2016-12-22 20:23:07

标签: amazon-web-services docker amazon-ec2 docker-machine

我使用docker-machine来管理AWS上的Docker节点。今天我尝试创建一个新节点,但由于实例类型和指定的AMI不兼容而失败:

docker-machine create --driver amazonec2 --amazonec2-instance-type t2.micro --amazonec2-ami ami-b4a015d4 certbot-config
Running pre-create checks...
Creating machine...
(certbot-config) Launching instance...
Error creating machine: 
    Error in driver during machine creation: 
    Error launching instance: InvalidParameterCombination: Virtualization type 'hvm' is required for instances of type 't2.micro'. Ensure that you are using an AMI with virtualization type 'hvm'. For more information, see http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/virtualization_types.html

无论如何,我纠正错误。我的问题是我似乎创造了鬼机;如果我运行docker-machine ls,我明白了:

NAME             ACTIVE   DRIVER      STATE   URL   SWARM   DOCKER    ERRORS
certbot-config   -        amazonec2   Error                 Unknown   MissingParameter: The request must contain the parameter InstanceId
             status code: 400, request id: 

我无法移除它,杀死它,重新启动它或配置它;每个命令退出时,AWS驱动程序出现400错误:

~$ docker-machine rm certbot-config
About to remove certbot-config
Are you sure? (y/n): y
Error removing host "certbot-config": unknown instance
MissingParameter: The request must contain the parameter KeyName
    status code: 400, request id: 

如何清除这个晃来晃去的实例?我有许多在docker-machine下运行的实例,所以我宁愿不做任何激烈的事情,比如重新安装。

编辑:

也许另一种方式来构建这个:docker-machine在哪里跟踪托管主机?据推测,我的计算机中有一个文件,其中有一个主机列表,当我运行时,#dock; docker-machine ls"它列出了该列表并ping状态。这个文件在哪里,我可以安全地删除我知道死的主机,而不会在其他地方留下垃圾吗?

2 个答案:

答案 0 :(得分:4)

  

也许另一种方式来构建这个:docker-machine在哪里跟踪托管主机?

检查您是否有环境变量MACHINE_STORAGE_PATH

如果没有,那些VMS应该在~/.docker

您还可以看到未解析的issue 3555

  

使用docker-machine配置 spot instance 会打开一个现场请求并等待其完成。如果失败,docker-machine退出,但现场请求仍然保持打开状态,可能会在以后完成。这会导致带有活动实例的悬空点请求。

issue 226docker-machine讨论了竞价型实例支持。

  

Spot Request开始,主要的附加参数似乎是BidRequest valid From/ToPersistent request

http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/images/spot_introduction.png

  

在机器的上下文中,我猜你可以设置request valid to = now + 2 minutes左右,此时命令可能会失败。

添加支持的PR为PR 942PR 1000 docker-machine rm可能无法充分找到/提供spot实例所期望的额外参数。

除了从〜/ .docker / machine / machines中删除相应的目录外,您还需要从AWS EC2控制台中删除相应的EC2密钥对。

答案 1 :(得分:3)

我也点了这个,并使用docker-machine rm -f [name]删除了本地参考。

然而,这留下了一个密钥对(在AWS控制台的EC2 - >密钥对下)。我手动删除了它。