Terraform Docker Provider推送镜像至Docker Hub遇配置及认证问题求助
Terraform Docker Hub镜像推送配置修正
修正后的完整代码
terraform { required_providers { docker = { source = "kreuzwerker/docker" version = "3.0.2" } } } provider "docker" { registry_auth { address = "registry-1.docker.io" username = "skench" # 替换为你的Docker Hub用户名(不是登录邮箱) password = "your_docker_hub_access_token" # 建议用访问令牌而非密码,不要硬编码,可改用变量 } } resource "docker_image" "application" { name = "skench/application" # 必须遵循「Docker Hub用户名/镜像名」格式 build { context = "." # 上下文为当前目录即可,无需指定./Dockerfile dockerfile = "Dockerfile" } keep_locally = false } resource "docker_registry_image" "application" { name = docker_image.application.name # 直接引用镜像资源的name属性,无需字符串包裹 }
关键修正点说明
- Registry地址修正:Docker Hub的标准认证地址是
registry-1.docker.io,无需追加/v1或/v2,provider会自动适配正确的API版本,错误地址会直接导致认证失败。 - 镜像名称格式修正:Docker Hub要求个人仓库镜像名称必须是「用户名/镜像名」格式,否则无法推送到你的专属仓库,将
application改为skench/application即可匹配你的账号。 - 资源引用修正:
docker_registry_image的name字段需要直接引用docker_image.application.name的资源属性,而非用字符串包裹,否则Terraform会将其视为普通文本,无法关联到构建好的镜像。 - 安全建议:不要在代码中硬编码密码,建议在Docker Hub账号设置中创建专属访问令牌(路径:账号设置→安全→访问令牌),并通过Terraform变量或环境变量(如
DOCKER_REGISTRY_PASSWORD)传入,避免敏感信息泄露。
内容的提问来源于stack exchange,提问作者skench jyg
相关产品推荐
相关产品推荐

