我有一个javascript应用程序的Docker镜像,它使用存储在Google Artifact Registry中的私有npm包。
在Google的CloudBuild中,我可以指定docker build -t myimage --network=cloudbuild .
,在Docker构建中,我可以运行npx google-artifactregistry-auth
,它使用构建服务帐户检索凭据,然后我可以运行我的RUN npm install
。
然而,当我在我的计算机(macOS)上安装ADC时,通过运行gcloud auth application-default login
进行设置,在docker中运行相同的命令失败:
19 2.583 npm WARN exec未找到以下软件包,将安装该软件包:Google-artifactregistry-auth@3.1.1
#19 6.822正在检索应用程序默认凭据...
#19 6.846正在从gcloud中检索凭据...
#19 6.856错误:无法获取凭据。请运行:
#19 6.856 gcloud auth application-default login
、gcloud auth login
或
#19 6.856 export GOOGLE_APPLICATION_CREDENTIALS=<path/to/service/account/key>
#19 6.856 at Object.getCreds(/root/.npm/_npx/64aef35f3ba01c7c/node_modules/google-artifactregistry-auth/src/auth.js:40:9)
#19 6.856 at async main(/root/.npm/_npx/64aef35f3ba01c7c/node_modules/google-artifactregistry-auth/src/main.js:83:19)
我尝试将环境变量设置为本地路径,但没有效果:
docker build --build-arg GOOGLE_APPLICATION_CREDENTIALS=/Users/myname_here/.config/gcloud/application_default_credentials.json -t hello_world .
1条答案
按热度按时间bqujaahr1#
gcloud application-default login
创建的application_default_credentials.json
不能作为服务账号json key,会被环境变量GOOGLE_APPLICATION_CREDENTIALS
引用,因为它们的内容不同。正如在这个stackoverflow link中提到的,你可以
~/.config
挂载到容器内的/root/.config
,并确保docker镜像安装了gcloud。gcloud创建的application_default_credentials.json
只有gcloud才能理解,所以你需要将其暴露给docker容器,并让docker容器内的gcloud进行身份验证。