Docker守护程序(不是容器)无法读取环境变量

时间:2019-09-23 19:07:25

标签: docker google-cloud-platform

尝试配置在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上尝试过此操作。

1 个答案:

答案 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