我已按照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
会在我的系统配置中返回值:Environment=GOOGLE_APPLICATION_CREDENTIALS=/etc/path/to/application_default_credentials.json
如果我$ sudo systemctl restart docker
,则docker运行成功,并且日志被发送到stackdriver。但是我希望此docker映像在启动时自动运行,并使用sudo
重新启动docker。
是否可以使用必要的环境变量来初始化docker守护进程,这样gcplogs就可以在启动时准备好了,而无需重启docker?
答案 0 :(得分:1)
我安装了两个版本的docker-一个是通过将docker的仓库添加到apt中,另一个是通过snap。正在运行
sudo systemctl list-unit-files| grep docker | grep enabled
显示了docker的两个安装:
docker.service enabled
snap.docker.dockerd.service enabled
有两个docker安装导致启动问题。我删除了快照安装,重新启动,现在一切正常。
答案 1 :(得分:0)
我认为您可以尝试编辑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