将Docker命令转为Terraform时,如何正确配置bind mount?
Terraform中Docker容器Bind Mounts的正确定义方式
你要转换的Docker命令:
docker run --name mysql -v ~/db/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d arm64v8/mysql:tag
你编写的main.tf执行terraform plan时出现错误:
An argument named "mounts" is not expected here. Did you mean to define a block of type "mounts"?
错误原因是**mounts在Terraform的Docker provider中是块(block)类型,不是参数(argument)**,不能用=赋值的方式定义,要改用块语法。
修正后的完整main.tf代码:
terraform { required_providers { docker = { source = "kreuzwerker/docker" version = "~> 3.0.1" } } } provider "docker" {} resource "docker_image" "mysql" { name = "arm64v8/mysql:8.0.33" keep_locally = true } resource "docker_container" "mysql" { image = docker_image.mysql.image_id name = "mysql" # 改用mounts块语法,移除等号 mounts { target = "/var/lib/mysql" source = "~/db/mysql" type = "bind" } env = [ "MYSQL_ROOT_PASSWORD=my-secret-pw", ] }
关键修改说明:
- 把
mounts ={ ... }改为mounts { ... },去掉赋值符号,使用Terraform的块定义语法 - 若需要添加多个挂载,直接重复编写
mounts { ... }块即可
内容的提问来源于stack exchange,提问作者Alexander Borochkin
相关产品推荐
相关产品推荐

