处理python脚本的自动身份验证,该脚本使用docker将数据读写到google big query

处理python脚本的自动身份验证,该脚本使用docker将数据读写到google big query,python,authentication,google-bigquery,Python,Authentication,Google Bigquery,我最近在我的本地机器上开发了一个python代码,可以从mysql数据库读取数据并插入到google big query中。我使用服务帐户进行身份验证,我的代码可以顺利执行而不会出错。现在我尝试在docker python容器中运行我的脚本。一旦我运行代码,就会收到一条身份验证消息,我不知道如何在用户和系统之间不进行交互的情况下自动处理该消息 信息是: “请访问此URL以授权此应用程序: 输入授权代码:回溯(最近一次呼叫上次):。。。 EOF:读取一行时的EOF " 我的Python代码: i

我最近在我的本地机器上开发了一个python代码,可以从mysql数据库读取数据并插入到google big query中。我使用服务帐户进行身份验证,我的代码可以顺利执行而不会出错。现在我尝试在docker python容器中运行我的脚本。一旦我运行代码,就会收到一条身份验证消息,我不知道如何在用户和系统之间不进行交互的情况下自动处理该消息

信息是:

“请访问此URL以授权此应用程序: 输入授权代码:回溯(最近一次呼叫上次):。。。

EOF:读取一行时的EOF "

我的Python代码:

import mysql.connector
import pandas as pd
from oauth2client.client import GoogleCredentials
from bigquery import get_client
import os
import urllib.request

service_account = 'xxxxx@xxxxxx.gserviceaccount.com'
key = 'xxxxxxxxx.p12'
project_id = 'xxxxxxxxx'
db = mysql.connector.connect(user=$user, 
password=$password,host=$host,database=$database)
df= pd.read_sql(sql_query,db)
....
client = get_client(project_id, service_account=service_account,  
private_key_file=key, readonly=False)

#Push dataframe to google bigquery
 df.to_gbq('GoogleBQDatbaseName.TableName',projectid,verbose=True,if_exists='append')
任何关于如何在脚本中自动处理此身份验证问题的建议。
谢谢你

我也做同样的工作,所以dockerfile中google auth的一部分如下所示:

RUN apt-get install -y software-properties-common curl

RUN export CLOUD_SDK_REPO="cloud-sdk-$(lsb_release -c -s)"; echo "deb http://packages.cloud.google.com/apt $CLOUD_SDK_REPO main" | tee -a /etc/apt/sources.list.d/google-cloud-sdk.list

RUN curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -

RUN apt-get update && apt-get -y install google-cloud-sdk

COPY YOUR_JSON_KEY_HERE.json /keys/ANY_NAME.json

ENV GOOGLE_APPLICATION_CREDENTIALS ANY_NAME.json

RUN gcloud auth activate-service-account --key-file=/keys/ANY_NAME.json
因此,您必须创建google服务帐户并从google云控制台获取json密钥。我也在用

FROM ubuntu:16.04
在本例中,在python脚本中,您不必使用googleauth。我的意思是你不需要这部分代码:

client = get_client(project_id, service_account=service_account, private_key_file=key, readonly=False) 

谢谢你详细的回答瓦西里。。。我会试试你的解决办法。不幸的是,目前我无法为服务帐户创建JSON文件,因为我没有足够的权限。我手里只有p12文件、项目id和服务帐户电子邮件文件。由于它在我的本地系统上运行正常,我想可能有一个解决方案可以在docker中处理这个问题,而不必像在本地Mac机器上一样创建JSON文件。你可以尝试p12密钥文件来代替JSON,但我不知道它是否有效