docker - Google Cloud 计算实例无法按启动脚本的预期运行

标签 docker google-cloud-platform google-compute-engine

我创建了一个 Google Cloud Compute Engine 实例模板,在其中指定要使用的 Docker 容器镜像(私有(private)托管在 Google 容器注册表 上)。 对于我的应用,我需要运行 Google Cloud Sql Proxyso 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/

相关文章:

mysql - 我想删除 "Mysql2::Error::ConnectionError (Unknown MySQL server host ' db' (0)) :"

docker - 如何更改构建上下文的 docker 源

google-cloud-platform - Google Cloud Platform API - 列出计算引擎的已使用区域

java - Spring Boot 中的 Google 云部署错误 - 部署失败 : Non zero exit: 1

email - 代表用户从 GCE 或 AWS 发送电子邮件

google-compute-engine - 如何更改 gcloud 中的事件配置文件?

nginx - 使用Docker --net = host并通过主机名连接到其他容器

linux - docker 的一个兼容性问题

google-cloud-platform - gsutil: ImportError: 没有名为 google 的模块

linux - 更改 chown 主文件夹后无法连接到 SSH 服务器 Google Compute Engine