尝试配置在GCP之外运行的容器以登录到Google Cloud Platform(StackDriver)。一个要求是Docker守护程序能够找到环境变量GOOGLE_APPLICATION_CREDENTIALS
以便进行身份验证。人们会假设以下方法会起作用,但不会:
GOOGLE_APPLICATION_CREDENTIALS=/usr/local/keys/project-1.json docker run --log-driver=gcplogs ...
输出:
ERROR: for api Cannot start service api:
failed to initialize logging driver: google: could not find default credentials.
See https://developers.google.com/accounts/docs/application-default-credentials
for more information.
还没有找到任何有关如何直接在daemon.json
上进行设置的文档,但是我也不希望那样做,因为我可能有不同的容器记录到不同的GCP项目。
我已经在Mac(docker桌面)和Debian上尝试过此操作。
答案 0 :(得分:2)
这是一个不断回升的问题。这里发生的是环境变量 GOOGLE_APPLICATION_CREDENTIALS 由系统docker守护程序加载。系统守护程序看不到用户登录中设置的环境变量。您需要做的是在系统级别设置 GOOGLE_APPLICATION_CREDENTIALS 。
这是在Ubuntu(Systemd)中执行此操作的方法:
$ sudo mkdir -p /etc/systemd/system/docker.service.d
使用以下内容创建 /etc/systemd/system/docker.service.d/env.conf :
[Service]
Environment="GOOGLE_APPLICATION_CREDENTIALS=/path/to/file.json"
应用更改。
$ sudo systemctl daemon-reload
完成重启docker / containerd守护程序
$ sudo systemctl restart containerd
$ sudo systemctl restart docker
测试gcplogs驱动程序
docker run --log-driver=gcplogs --log-opt gcp-project="my-project" hello-world