使用Google Coud Run(或任何云服务)和Docker,用简单的python脚本编写应用程序



我有一个相对简单的使用docker compose的docker应用程序,我想部署它。它所包含的只是一个python脚本,我希望它每天自动运行,不需要用户输入。

我想使用谷歌云运行来部署这个应用程序,因为它不需要全天候在线。但我不确定它是否与docker-compose.yml.兼容

这是我的docker撰写文件:

version: '3.9'
secrets:
venmo_api_key:
file: ./secrets/venmo_api_token.txt
services:
app:
build: ./app
secrets:
- venmo_api_key

正如你所看到的,我需要docker-compose,这样我的秘密就可以通过运行docker-compose up在我的容器中使用。它在本地运行良好!

为了将我的图像部署到Google Container Registry,我运行了:

  1. docker-compose build
  2. docker tag cb3605 gcr.io/venmoscription-v2/venmoscription-service
  3. docker push gcr.io/venmoscription-v2/venmoscription-service

在Google Cloud Run中,我选择了GCR URL,并将所有其他选项保留为默认选项,只是为了查看我的容器是否可以在线运行。然而,我在谷歌云运行日志中得到了这个错误:

False for Revision venmoscription-service-00001-qig with message: Cloud Run error: Container failed to start. Failed to start and then listen on the port defined by the PORT environment variable. Logs for this revision might contain more information.

我在之后也收到了这个错误消息

Traceback (most recent call last):
File "/app/main.py", line 13, in <module>
client = Client(access_token = get_docker_secret("venmo_api_key"))
File "/home/app/.local/lib/python3.9/site-packages/venmo_api/venmo.py", line 15, in __init__
self.__profile = self.user.get_my_profile()
File "/home/app/.local/lib/python3.9/site-packages/venmo_api/apis/user_api.py", line 26, in get_my_profile
response = self.__api_client.call_api(resource_path=resource_path,
File "/home/app/.local/lib/python3.9/site-packages/venmo_api/utils/api_client.py", line 58, in call_api
return self.__call_api(resource_path=resource_path, method=method,
File "/home/app/.local/lib/python3.9/site-packages/venmo_api/utils/api_client.py", line 103, in __call_api
processed_response = self.request(method, url, session,
File "/home/app/.local/lib/python3.9/site-packages/venmo_api/utils/api_client.py", line 139, in request
validated_response = self.__validate_response(response, ok_error_codes=ok_error_codes)
File "/home/app/.local/lib/python3.9/site-packages/venmo_api/utils/api_client.py", line 170, in __validate_response
raise HttpCodeError(response=response)
venmo_api.models.exception.HttpCodeError: HTTP Status code is invalid. Could not make the request because -> 401 Unauthorized.

基本上,Google Cloud Run中的容器无法访问我在docker-compose.yml.中定义的秘密

有人知道我应该做什么吗?或者请解释如何使用无服务器解决方案启动并运行我的docker compose应用程序?非常感谢。

Cloud Run不像docker compose那样支持多个容器,因此您需要部署一个容器来实现您的目标。Cloud Run确实希望您的容器启动并侦听端口(如web应用程序(,否则它将不会启动。

这个页面有一个很好的循序渐进的简单python应用程序,可以在Cloud Run上部署并在端口上侦听https://cloud.google.com/run/docs/quickstarts/build-and-deploy/python

您还可以使用谷歌秘密管理器在服务路径上提供您的venmo秘密。https://cloud.google.com/run/docs/configuring/secrets

我希望这能帮助你开始。

最佳,Josh

最新更新