Google Cloud Logging 驱动程序在重启后找不到凭据

Google Cloud Logging Driver cannot find credentials after reboot

我已按照说明进行操作 here,在我重新启动计算机之前一切正常。重新启动后,docker 守护程序似乎失去了对 Google 凭据的跟踪。

$ docker run --log-driver=gcplogs ...

失败:

docker: Error response from daemon: failed to initialize logging driver: google: could not find default credentials. See https://developers.google.com/accounts/docs/application-default-credentials for more information.
ERRO[0000] error waiting for container: context canceled

这对我来说很奇怪,因为 运行ning $ systemctl show --property=Environment docker returns 我的 systemd 配置中的值:

Environment=GOOGLE_APPLICATION_CREDENTIALS=/etc/path/to/application_default_credentials.json

如果我 $ sudo systemctl restart docker,则 docker 运行 会成功并将日志发送到 stackdriver。但我希望这个 docker 图像在启动时自动 运行,并且用 sudo 重新启动 docker 会妨碍。

有没有办法用必要的环境变量初始化 docker 守护进程,这样 gcplogs 就可以在启动时准备就绪而无需重新启动 docker?

我想你可以尝试编辑 systemd: Unit dependencies and order,让 docker.service 在 google-accounts-daemon.service 之后开始。

您可以通过

查看google vm中的所有服务
sudo systemctl list-unit-files| grep google | grep enabled

你会看到

google-accounts-daemon.service             enabled
google-clock-skew-daemon.service           enabled
google-instance-setup.service              enabled
google-network-daemon.service              enabled
google-shutdown-scripts.service            enabled
google-startup-scripts.service             enabled

我安装了两个版本的 docker -- 一个是通过添加 docker 的 repo 到 apt,另一个是通过 snap。 运行

sudo systemctl list-unit-files| grep docker | grep enabled

显示了 docker 的两个安装:

docker.service                             enabled    
snap.docker.dockerd.service                enabled

有两个 docker 安装导致启动问题。我删除了 snap 安装,重新启动,现在一切正常。