我有相同的代码与相同的p12文件(已检查的md5总和),相同的account_email,以及在多台计算机上工作的相同作用域,但不能在任何正常工作的计算机上的Docker容器中工作。我的代码段如下:
with open(self.pkcs12_file_path, 'rb') as f:
key = f.read()
scope = ['https://www.googleapis.com/auth/bigquery',
'https://www.googleapis.com/auth/cloud-platform']
credentials = SignedJwtAssertionCredentials(self.account_email,
key, scope)
http = httplib2.Http()
self.http = credentials.authorize(self.http)
service = discovery.build('bigquery', 'v2', http=self.http)
每当我在Docker容器中尝试此操作时,我会在oauth2client.client.AccessTokenRefreshError: invalid_grant
行获得discovery.build
。我想它可能与需要暴露端口有关,但不知道我需要暴露哪些,或者这是否是实际问题。有人有什么想法吗?
答案 0 :(得分:3)
这听起来像时钟问题。 Google的OAuth访问令牌有效期为一小时(Google刷新令牌永久有效,您可以使用它们来检索新的访问令牌)。您能否验证Docker容器的时钟是否与主机同步(或设置为您预期的时区?)。
请参阅:Will docker container auto sync time with the host machine?