You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 22:43:09