使用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 } }
问题原因
- RHEL 7镜像默认无Docker环境:你选用的
rhel-cloud/rhel-7启动盘镜像,系统默认没有安装Docker,所以执行docker命令会提示找不到。 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
相关产品推荐
相关产品推荐

