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

使用Terraform创建GCP VM后无法运行Docker镜像问题排查

GCP VM实例创建成功但执行docker ps提示docker: command not found的问题排查

我通过Terraform脚本创建运行Docker镜像的GCP VM实例,VM实例创建成功,但登录后执行docker ps命令时出现-bash: docker: command not found错误。我的Terraform脚本如下:

module "gce-container" {
  source = "terraform-google-modules/container-vm/google"
  version = "~> 2.0"

  container = {
    name = "nginx"
    image = "gcr.io/cloud-marketplace/google/nginx1:latest"
  }

  restart_policy = "Always"
}

// Create VM instance with docker image:
resource "google_compute_instance" "agent1" {
  name         = var.agentname
  machine_type = "e2-small"
  zone         = "${var.region}-a"
  depends_on   = [google_compute_address.static1]
  network_interface {
    network    = google_compute_network.vpc.name
    subnetwork = google_compute_subnetwork.subnet.name
    access_config {
      nat_ip = google_compute_address.static1.address
    }
  }
  boot_disk {
    initialize_params {
      image = "rhel-cloud/rhel-7"
    }
  }

  metadata = {
    // This should spawn a docker image after the vm instance is created successfully.
    gce-container-declaration = module.gce-container.metadata_value
  }
}

问题原因

  1. RHEL 7镜像默认无Docker环境:你选用的rhel-cloud/rhel-7启动盘镜像,系统默认没有安装Docker,所以执行docker命令会提示找不到。
  2. gce-container-declaration元数据不兼容RHEL:这个元数据是GCP专门给Container-Optimized OS (COS) 镜像设计的——COS镜像内置Docker和容器管理组件,会自动读取该元数据启动容器,但RHEL 7完全不识别这个配置,自然不会帮你安装Docker或启动容器。

解决方案

方案一:改用Container-Optimized OS镜像(推荐)

直接把启动盘镜像换成COS官方稳定版,它会自动处理Docker安装、容器启动的所有流程,完全适配你配置的gce-container-declaration元数据:

boot_disk {
  initialize_params {
    image = "cos-cloud/cos-stable"
  }
}

修改后重新执行Terraform,VM启动后会自动启动Nginx容器,登录后执行docker ps就能看到运行中的容器实例。

方案二:继续使用RHEL 7,手动配置Docker和容器启动

如果必须保留RHEL 7镜像,需要移除无效的gce-container-declaration元数据,改用启动脚本手动安装Docker并启动容器:

metadata = {
  startup-script = <<-EOF
    #!/bin/bash
    # 安装Docker依赖并启动服务
    yum install -y docker
    systemctl start docker
    systemctl enable docker
    # 拉取镜像并启动Nginx容器
    docker run -d --name nginx -p 80:80 gcr.io/cloud-marketplace/google/nginx1:latest
  EOF
}

这样VM启动时会自动执行脚本完成Docker安装和容器启动,之后就能正常使用docker命令。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 21:55:11