main.tf
terraform {
required_providers {
docker = {
source = "kreuzwerker/docker"
}
google = {
source = "hashicorp/google"
}
random = {
source = "hashicorp/random"
}
}
}
provider "docker" {}
resource "docker_image" "nginx" {
name = "nginx:latest"
keep_locally = false
}
resource "docker_container" "nginx" {
image = docker_image.nginx.latest
name = "tutorial"
ports {
internal = 80
external = 8000
}
}在执行terraform init时,我面临只下载停靠资源的问题:
Initializing the backend...
Initializing provider plugins...
- Finding latest version of hashicorp/google...
- Finding latest version of hashicorp/random...
- Finding latest version of kreuzwerker/docker...
- Installing hashicorp/google v4.11.0...
- Installed hashicorp/google v4.11.0 (signed by HashiCorp)
- Installing hashicorp/random v3.1.0...
- Installed hashicorp/random v3.1.0 (signed by HashiCorp)
╷
│ Error: Failed to install provider
│
│ Error while installing kreuzwerker/docker v2.16.0: could not query provider registry for registry.terraform.io/kreuzwerker/docker: failed to retrieve authentication checksums for
│ provider: the request failed after 2 attempts, please try again later: Get
│ "https://github.com/kreuzwerker/terraform-provider-docker/releases/download/v2.16.0/terraform-provider-docker_2.16.0_SHA256SUMS": context deadline exceeded在遵循这个职位之后,我下载了本地文件,并成功地执行了terraform init,但是运行terraform应用失败,错误如下:
│ Error: Could not load plugin
│
│
│ Plugin reinitialization required. Please run "terraform init".
│
│ Plugins are external binaries that Terraform uses to access and manipulate
│ resources. The configuration provided requires plugins which can't be located,
│ don't satisfy the version constraints, or are otherwise incompatible.
│
│ Terraform automatically discovers provider requirements from your
│ configuration, including providers used in child modules. To see the
│ requirements and constraints, run "terraform providers".
│
│ failed to instantiate provider "registry.terraform.io/kreuzwerker/docker" to obtain schema: fork/exec
│ .terraform/providers/registry.terraform.io/kreuzwerker/docker/2.16.0/linux_amd64/terraform-provider-docker_2.16.0_linux_amd64.zip: permission denied系统详细信息:
操作系统: Ubuntu 21.10
Terraform版本尝试了:
我还推出了另一个码头集装箱,并复制了这个问题,并且我能够用terraform init复制同样的问题。
更新:
gahan@jarvis:~/devOps/test$ terraform init
Initializing the backend...
Initializing provider plugins...
- Finding latest version of hashicorp/random...
- Finding latest version of kreuzwerker/docker...
- Finding latest version of hashicorp/google...
- Installing hashicorp/google v4.11.0...
- Installed hashicorp/google v4.11.0 (signed by HashiCorp)
- Installing hashicorp/random v3.1.0...
- Installed hashicorp/random v3.1.0 (signed by HashiCorp)
╷
│ Error: Failed to install provider
│
│ Error while installing kreuzwerker/docker v2.16.0: could not query provider registry for registry.terraform.io/kreuzwerker/docker: failed to retrieve authentication checksums for provider: the request
│ failed after 2 attempts, please try again later: Get "https://github.com/kreuzwerker/terraform-provider-docker/releases/download/v2.16.0/terraform-provider-docker_2.16.0_SHA256SUMS": net/http: request
│ canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
╵
gahan@jarvis:~/devOps/test$ cat /etc/group | grep docker
docker:x:998:gahan
gahan@jarvis:~/devOps/test$ docker pull python:alpine3.13
alpine3.13: Pulling from library/python
5758d4e389a3: Pull complete
9292b3ab1647: Pull complete
35d95eb0acaf: Pull complete
cfda6539f3f2: Pull complete
f4471b8ea909: Pull complete
Digest: sha256:93eb0ba98b15791a071ec8bce2483e670e52c83af51962d3255b4f8f93b52d24
Status: Downloaded newer image for python:alpine3.13
docker.io/library/python:alpine3.13发布于 2022-02-27 08:17:33
发布于 2022-02-23 10:48:49
@Gahan,我猜问题是权限问题,如果我没有错,码头需要sudo访问才能运行,而terraform可以正常访问用户。如果您错误地查看下面一行
.terraform/providers/registry.terraform.io/kreuzwerker/docker/2.16.0/linux_amd64/terraform-provider-docker_2.16.0_linux_amd64.zip: permission denied它显示的是“拒绝许可”。
我想您可以尝试将user+group从sudo更改为本地用户以获取.terraform目录,并进行尝试。
chown <user>:<group> .terraform
chmod 750 .terraform/providers/registry.terraform.io/kreuzwerker/docker/2.16.0/linux_amd64/terraform-provider-docker_2.16.0_linux_amd64.zip最新情况:
此设置在MacOS中运行良好,我只是尝试使用上面的main.tf内容在对接器中创建ngnix容器,并且能够成功地初始化和应用terraform。我用的是Mac操作系统。Terraform版本- 1.1.1,Docker版本- 4.4.2
接下来,我尝试在ubuntu机器(20.04 LTS)上复制相同的内容,并在运行"terraform apply“时遇到了类似的问题。
错误:
Error: Error pinging Docker server: Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get "http://%2Fvar%2Frun%2Fdocker.sock/_ping": dial unix /var/run/docker.sock: connect: permission denied经过进一步的调查,我解决了这个问题。
造成问题的主要原因是我们的自定义用户无法执行docker的命令。因此,当terraform试图运行与docker相关的命令时,这将失败。我们可以执行以下步骤来解决这个问题
$ cat /etc/group$ sudo usermod -aG docker $User_Name
Eg : sudo usermod -aG docker tapan1991$ terraform apply希望这能帮上忙!
https://stackoverflow.com/questions/71235127
复制相似问题