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

使用OpenTofu构建Docker镜像时遇context not found错误求助

问题排查思路

1. 检查OpenTofu的Docker构建上下文配置

OpenTofu的docker_image资源指定本地路径作为context时,默认会启动临时HTTP服务传递上下文给Docker daemon,若路径配置错误或临时服务异常就会触发该报错。

  • 确认context字段指向正确的相对/绝对路径,确保路径下包含Dockerfile及所有构建依赖文件,示例配置:
    resource "docker_image" "example" {
      name         = "my-image:latest"
      build {
        context    = "./docker-build-dir" # 与Tofu工作目录相对的正确路径
        dockerfile = "Dockerfile"
      }
    }
    
  • 避免使用含特殊字符、空格的路径,防止临时HTTP服务无法正常读取上下文内容。

2. 验证上下文目录的权限设置

Tofu启动的临时服务可能因权限不足无法读取上下文文件,即使手动构建无问题,Tofu对权限的检查可能更严格。

  • 运行ls -la ./docker-build-dir查看目录及文件权限,确保Tofu运行用户拥有读权限(至少r权限)。
  • 若构建依赖test.sh脚本,确保其有执行权限:chmod +x test.sh。

3. 升级Docker Provider至稳定版

旧版本Docker Provider可能存在本地上下文转HTTP服务的bug,导致临时服务异常。

  • 更新Provider配置到最新兼容版本:
    terraform {
      required_providers {
        docker = {
          source  = "kreuzwerker/docker"
          version = "~> 3.0" # 替换为最新稳定版
        }
      }
    }
    
  • 执行tofu init -upgrade完成升级后重新构建。

4. 强制使用本地构建逻辑(绕过临时HTTP服务)

配置build块让Tofu直接调用本地Docker构建逻辑,与手动执行docker build行为一致:

resource "docker_image" "example" {
  name         = "my-image:latest"
  build {
    context    = "."
    dockerfile = "${path.module}/Dockerfile" # 用绝对路径指定Dockerfile
    force_remove = true
    no_cache     = true
  }
}

5. 排查环境网络限制

若环境存在防火墙、代理或网络隔离策略,可能阻断Tofu临时HTTP服务与Docker daemon的通信。

  • 临时关闭防火墙(如ufw disable)或添加本地回环通信的允许规则。
  • 检查Docker daemon配置,确保允许从本地HTTP服务拉取构建上下文(默认允许,但若有自定义配置需确认)。

内容的提问来源于stack exchange,提问作者Hugo Laulhere

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 19:39:56