我正在通过cloud.google.com/go/logging
将我的go应用程序与Stackdriver日志集成在一起。部署在Flex引擎上的GCP中时,我的应用程序运行得非常好。但是,当我在本地运行我的应用程序时,只要我点击localhost:8080
,我的控制台就会出现以下错误,应用程序会自动被杀死:
Metadata fetch failed: Get http://metadata/computeMetadata/v1/instance/attributes/gae_project: dial tcp: lookup metadata on 127.0.0.
11:53: server misbehaving
我的理解是,在本地运行时,代码不应该尝试访问Google的内部元数据,这就是上面发生的事情。我挖得更深,看起来这部分是在代码cloud.google.com/go/compute/metadata/metadata.go
中处理的。我可能在这里错了,但看起来我必须设置一个env变量才能使代码正常工作。粘贴metadata.go
// metadataHostEnv is the environment variable specifying the
// GCE metadata hostname. If empty, the default value of
// metadataIP ("169.254.169.254") is used instead.
// This is variable name is not defined by any spec, as far as
// I know; it was made up for the Go package.
metadataHostEnv = "GCE_METADATA_HOST"
如果我的所有理解都是真的,我应该将GCE_METADATA_HOST
设置为什么?如果我对自己的理解不对,为什么我会看到这个错误?这个错误是否可能与我的Docker有关,而不是与Stackdriver日志记录有关?
我在带有docker-compose的容器中运行我的应用程序。我正在执行生成二进制文件的go install
,然后我只是执行二进制文件。
编辑:这是我的撰写文件
version: '3'
services:
dev:
image: <gcr_image>
entrypoint:
- /bin/sh
- -c
- "cat ./config-scripts/config.sh >> /root/.bashrc; bash"
command: bash
stdin_open: true
tty: true
working_dir: /code
environment:
- ENV1=value1
- ENV2=value2
ports:
- "8080:8080"
volumes:
- .:/code
- ~/.npmrc:/root/.npmrc
- ~/.config/gcloud:/root/.config/gcloud
- /var/run/docker.sock:/var/run/docker.sock