我按照指示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
这对我来说很奇怪,因为运行$ systemctl show --property=Environment docker
会返回我的systemd配置中的值:Environment=GOOGLE_APPLICATION_CREDENTIALS=/etc/path/to/application_default_credentials.json
如果我$ sudo systemctl restart docker
,那么docker运行成功并且日志被发送到stackdriver。但是我希望这个docker镜像在启动时自动运行,并且用sudo
重新启动docker会妨碍。
有没有办法用必要的环境变量初始化docker守护进程,所以gcplogs在启动时准备就绪而不重启docker?
我安装了两个版本的docker - 一个是通过将docker的repo添加到apt,另一个是通过snap。运行
sudo systemctl list-unit-files| grep docker | grep enabled
显示了两个docker的安装:
docker.service enabled
snap.docker.dockerd.service enabled
有两个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