docker - Terraform docker 无法使用远程主机的容器注册表进行身份验证
问题描述
我在使用 Terraform 0.13.4 的 Windows 机器上,并尝试使用 Terraform 和 Docker 提供程序在远程主机上启动一些容器:
provider "docker" {
host = "tcp://myvm:2376/"
registry_auth {
address = "myregistry:443"
username = "myusername"
password = "mypassword"
}
ca_material = file(pathexpand(".docker/ca.pem"))
cert_material = file(pathexpand(".docker/cert.pem"))
key_material = file(pathexpand(".docker/key.pem"))
}
data "docker_registry_image" "mycontainer" {
name = "myregistry:443/lvl1/lvl2/myimage:latest"
}
我很难做到这一点,因为它无法通过我的私人注册表进行身份验证。总是越来越401 Unauthorized
。
如果我不这样做来获取sha256_digest
并仅使用docker_container
资源,那么一切正常,但它会强制替换正在运行的容器。
解决方案
你好 Angelos,如果你不想强制更换正在运行的容器,你应该试试这个:
provider "docker" {
host = "tcp://myvm:2376/"
registry_auth {
address = "myregistry:443"
username = "myusername"
password = "mypassword"
}
ca_material = file(pathexpand(".docker/ca.pem"))
cert_material = file(pathexpand(".docker/cert.pem"))
key_material = file(pathexpand(".docker/key.pem"))
}
data "docker_registry_image" "mycontainer" {
name = "myregistry:443/lvl1/lvl2/myimage:latest"
}
resource "docker_image" "example" {
name = data.docker_registry_image.mycontainer.name
pull_triggers = [data.docker_registry_image.mycontainer.sha256_digest]
keep_locally = true
}
然后在容器中使用:
resource "docker_container" "example" {
image = docker_image.example.latest
name = "container_name"
}
你应该使用
docker_image.example.latest
使用资源 docker_image 本身,如果它已经存在,他将不会拉取图像并且不会重新启动容器,但是如果您将名称作为字符串传递,他将每次都替换容器。
https://www.terraform.io/docs/providers/docker/r/container.html
推荐阅读
- c# - 提高 Blazor .NET 5.0 中许多子组件(Quill JS 富文本编辑器)的性能?
- javascript - 让最基本的 ajax 在 Windows 7 上的 xampp 上工作以检查互联网连接
- c# - DocuSign API:在同一个信封中发送多个文档的签名问题
- node.js - 尝试使用 GitHub 项目时出现 ERR
- python - 模板语法错误:无法传递余数
- linux - 创建 Conda 环境状态失败:143
- jquery - 在 Angular 9 项目中使用没有 JQuery 的 Bootstrap 4
- python - 我的 python 显示此错误:启动器中的致命错误 [WinError 5] 因为我重命名了我的用户文件夹名称
- javascript - 当变量达到特定值时向所有客户端发出
- html - Rails在body标签内渲染导航栏