我想将Terrafom用于以下任务序列:
在常见的IaaS云中创建虚拟机(我目前正在使用Google Compute Engine,但AWS / Azure /等也很好)
在该VM上安装Docker
在该VM上启动Docker容器
应该采取的方式如下:
config.tf:
module "google_server" {
source="google_module"
name_machine = "server"
}
provider "docker" {
alias="abc"
host="tcp://${module.google_server.ip_address[0]}:2375"
}
resource "docker_container" "container" {
provider = "docker.abc"
...
}
google_module / google_server.tf
provider "google" {
...
}
resource "google_compute_instance" "vm" {
...
}
output "ip_address" {
value = "${google_compute_instance.vm.*.network_interface.0.access_config.0.assigned_nat_ip}"
}
但是我收到以下错误:
module.docker.provider.docker.abc: Error initializing Docker client: invalid endpoint
如果我用随机IPv4地址替换${module.google_server.ip_address[0]}
,则错误会更改为超时。
我能够解决问题的唯一方法是通过带有Terraform的SSH脚本运行docker。由于这不是很干净,我将不胜感激。
答案 0 :(得分:0)
我自己找到了答案。这是TerraForm的Github项目中的open issue。
常见的解决方法(as described here)是首先使用TerraForm apply
标记运行-target
,以便运行多阶段apply
。
在这种情况下,它将是:
$ terraform apply -target=module.google_server
-- works on target first --
$ terraform apply
-- works on rest --