我创建了一个 Google Cloud Compute Engine 实例模板,在其中指定要使用的 Docker 容器镜像(私有(private)托管在 Google 容器注册表 上)。 对于我的应用,我需要运行 Google Cloud Sql Proxy,so I followed these steps并在我的 Compute Engine 实例模板上添加了一个启动脚本,如下所示:
#! /bin/bash
wget https://dl.google.com/cloudsql/cloud_sql_proxy.linux.amd64 -O /var/lib/google/cloud_sql_proxy
chmod 777 /var/lib/google/cloud_sql_proxy
sudo /var/lib/google/cloud_sql_proxy -instances={instance name} &
我遇到的问题是,当我基于此模板创建 Compute Engine 虚拟机实例时
gcloud compute instances create {instance name} --source-instance-template {template name}
实例已创建并启动,我可以看到 cloud_sql_proxy 脚本正在运行,但是 docker 镜像未提取,容器也未启动...
我尝试在不指定启动脚本的情况下创建一个 Compute Engine 虚拟机实例,它工作正常,提取了 docker 镜像并且容器开始运行。 随着计算实例的运行,我通过 ssh 连接并手动启动 cloud_sql_proxy 脚本,一切正常(应用程序成功连接到 Google Cloud SQL 上的 SQL 实例)。 但我想让这个自动化......
我错过了什么?有人遇到过这个问题吗?
最佳答案
启动脚本可能会以某种方式阻止容器启动器。后者是konlet-startup.service ,这尤其取决于 systemd 配置中的云注册表服务和启动脚本服务:
[Unit]
Description=Containers on GCE Setup
Wants=network-online.target google-startup-scripts.service gcr-online.target docker.socket
After=network-online.target google-startup-scripts.service gcr-online.target docker.socket
要调试此问题,您可以通过在启动脚本开头插入 systemctl start gcr-online.target
来强制执行 gcr-online.target
。
此外,您还应确保启动脚本退出并且不会无休止地运行,因为 konlet-startup.service
正在等待 google-startup-scripts.service
报告成功退出代码:exit 0
。
关于docker - Google Cloud 计算实例无法按启动脚本的预期运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62504964/