为什么在 Docker 容器内使用 Telethon 时出现“ValueError:您的 API ID 或哈希不能为空或无”

问题描述 投票:0回答:1

当我尝试运行使用 Docker 容器内的 telethon 将文件发送到聊天的 python 脚本时,我收到 ValueError: Your API ID or Hash can not be empty or None 。我用 cron 安排的。

这是我的 docker_compose 文件的一部分...

...
name_xyz:
  env_file: .env
  environment:
    PYTHONUNBUFFERED: 1
    TELEGRAM_POSTING_API_HASH: ${TELEGRAM_POSTING_API_HASH}
    TELEGRAM_POSTING_API_ID: ${TELEGRAM_POSTING_API_ID}
  build:
    context: ./xyz/
    dockerfile: Dockerfile
  volumes:
    - ./xyz:/app
  working_dir: /app/xyz/
  restart: always
  command: ./entrypoint.sh
...

所以......在我的Python脚本中我有:

import os
import asyncio
import requests
from telethon import TelegramClient

TELEGRAM_POSTING_API_HASH = os.getenv('TELEGRAM_POSTING_API_HASH')
TELEGRAM_POSTING_API_ID = os.getenv('TELEGRAM_POSTING_API_ID')

client = TelegramClient('session_name', TELEGRAM_POSTING_API_ID, TELEGRAM_POSTING_API_HASH)
...

在我的 .env 文件中我有:

TELEGRAM_POSTING_API_ID=11111111111
TELEGRAM_POSTING_API_HASH=11111111111

我实际上不知道我做错了什么,也许我错过了一些东西。请帮忙!

我尝试在 python 脚本中对 api id 和 api hash 进行硬编码,效果非常好。 但是当我使用 os.getenv() 函数时,它给了我一个 ValueError: Your API ID or Hash can not be empty or None

当我将 docker compose 文件更改为:

name_xyz:
  env_file: .env
  environment:
    PYTHONUNBUFFERED: 1
    TELEGRAM_POSTING_API_HASH: ${TELEGRAM_POSTING_API_HASH}
    TELEGRAM_POSTING_API_ID: ${TELEGRAM_POSTING_API_ID}
  build:
    context: ./xyz/
    dockerfile: Dockerfile
  volumes:
    - ./xyz:/app
  working_dir: /app/xyz/telegram
  restart: always
  command: python3 my_python_script.py

它也可以工作......所以我想也许是它的cron。

这是我的入口点.sh

#!/bin/bash

# Start the run once job.
echo "Docker container has been started"


# shellcheck disable=SC2046

# Setup a cron schedule
echo "SHELL=/bin/bash

*/2 * * * *  cd /app/xyz/telegram/ && python3 my_python_script.py  >> /var/log/cron.log 2>&1
# This extra line makes it a valid cron" > scheduler.txt

crontab scheduler.txt
cron -f
python docker cron environment-variables telethon
1个回答
0
投票

当 cron 执行作业时,它不会加载环境变量,因为 cron 从非交互式 shell 运行作业。由于我的程序需要环境变量才能正常运行,因此我收到了该错误。

我通过在入口点.sh 中添加环境变量作为 shell 变量来解决这个问题

我希望您觉得这个答案有用! 😁

© www.soinside.com 2019 - 2024. All rights reserved.