我使用Docker Compose使用Google Cloud Build构建了一个映像。在我的cloudbuild.yml
文件中,执行以下步骤:
现在,每当构建一个新实例时,就会出现此问题,从映像创建的容器会不断重新启动,而实际上不会启动。尽管如此,我仍可以构建映像,并将其作为实例启动,独立于云构建映像中的容器。
我设法从日志中找到一些线索:
E1219 19:13:52 7f28dce6d700 api_server.cc:184 Metadata request unsuccessful: Server responded with 'Forbidden' (403): Transport endpoint is not connected
oauth2.cc:289 Getting auth token from metadata server docker
我还通过在实例中运行以下命令获得了一些线索:
docker -a -i start <container_id>
输出:Unrecognized input header: 99
cloudbuild.yml
文件看起来像(我已经用...
替换了一些变量):
#cloudbuild.yaml
steps:
- name: 'docker/compose:1.22.0'
args: ['-f', 'docker/docker-compose.tb.prod.yml', 'up', '-d']
- name: 'gcr.io/cloud-builders/docker'
args: ['tag', 'tb:latest', '...']
- name: 'gcr.io/cloud-builders/gcloud'
args: [
'beta', 'compute', '--project=...', 'instance-templates', 'create-with-container',
'tb-app-staging-${COMMIT_SHA}',
'--machine-type=n1-standard-2', '--network=...', '--network-tier=PREMIUM', '--metadata=google-logging-enabled=true',
'--maintenance-policy=MIGRATE', '--service-account=...',
'--scopes=https://www.googleapis.com/auth/cloud-platform,https://www.googleapis.com/auth/devstorage.read_only,https://www.googleapis.com/auth/logging.write,https://www.googleapis.com/auth/monitoring.write,https://www.googleapis.com/auth/servicecontrol,https://www.googleapis.com/auth/service.management.readonly,https://www.googleapis.com/auth/trace.append',
'--tags=http-server,https-server', '--image=cos-stable-69-10895-62-0', '--image-project=cos-cloud', '--boot-disk-size=20GB', '--boot-disk-type=pd-standard',
'--container-restart-policy=always', '--labels=container-vm=cos-stable-69-10895-62-0',
'--boot-disk-device-name=...',
'--container-image=...',
]
- name: 'gcr.io/cloud-builders/gcloud'
args: [
'beta', 'compute', '--project=...', 'instance-groups',
'managed', 'rolling-action', 'start-update',
'tb-app-staging',
'--version',
'template=...',
'--zone=europe-west1-b',
'--max-surge=20',
'--max-unavailable=9999'
]
images: ['...']
timeout: 1200s
答案 0 :(得分:3)
我找到了问题,我会自己回答这个问题,以防万一其他人遇到同一问题。
问题是,在我的docker-compose.yml
中,我将stdin_open
和tty
的配置设置为true,但是我的cloudbuild.yml
文件没有接受它,并且无提示地失败了(烦人!)。
要解决此问题,您将需要使用--container-stdin
命令上的标志--container-tty
和create-with-container
。
更多详细信息可以在Google文档https://cloud.google.com/compute/docs/containers/configuring-options-to-run-containers
中找到答案 1 :(得分:2)
我有一个类似的问题,原因是在 Dockerfile 中设置了 USER。我正在使用将用户更改为“节点”,这是用户在官方 nodejs 图像中可用的。但不适用于 Google 云容器。
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<link rel="stylesheet" href="http://netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.min.css">)
<div class="container">
<h1>To Do List - Jquery</h1>
<p><em>Click and delete</em></p>
<form class="form">
<label>Enter a new task:</label>
<input class="input" type="text" placeholder="Enter your task">
<button class="add" type="button">Add</button><button type="reset" class="reset">Clear</button>
<ul>
</ul>
</form>
</div>