我正在尝试将我在App Engine Flex环境中使用过的应用容器化。我能够使用Cloud Build创建Docker映像,存储在Cloud Registry中,并启动GKE pod。但是,在部署和公开后,出现以下错误:
severity: "ERROR"
textPayload: "Traceback (most recent call last):
File "main.py", line 19, in <module>
app = worldgiftart.create_app(config)
File "/app/worldgiftart/_init_.py", line 40, in create_app
from .crud import crud
File "/app/worldgiftart/crud.py", line 15, in <module>
from worldgiftart import get_model, storage
File "/app/worldgiftart/storage.py", line 20, in <module>
from google.cloud import storage
File "/usr/local/lib/python3.8/site-packages/google/cloud/storage/_init_.py", line 38, in <module>
from google.cloud.storage.blob import Blob
File "/usr/local/lib/python3.8/site-packages/google/cloud/storage/blob.py", line 54, in <module>
from google.cloud.iam import Policy
ModuleNotFoundError: No module named 'google.cloud.iam'
这是我的Dockerfile:
FROM python:3
WORKDIR /app
ADD . /app
RUN pip install -r requirements.txt
# Open port 80 for serving the webpage
EXPOSE 80
# Run main.py when the container launches
CMD ["python", "main.py"]
这里是requirements.txt
:
Flask==1.1.2
google-cloud-datastore==1.12.0
google-cloud-storage==1.28.1
gunicorn==20.0.4
oauth2client==4.1.3
Flask-SQLAlchemy==2.4.1
PyMySQL==0.9.3
Flask-PyMongo==2.3.0
PyMongo==3.10.1
six==1.14.0
任何建议要检查或更改的内容?
谢谢-乔
看起来问题是App Engine和GKE之间的区别。部署到App Engine会自动处理为服务帐户分配适当的权限; GKE并非如此。必须建立服务帐户并绑定适当的权限。感谢所有看过的人。希望这对以后的人有所帮助。