python - Docker 容器在自动运行时表现出不同的行为
问题描述
我有一个基本的 Python Docker 容器,它使用 O365 库从 Office365 检索邮件。
FROM python:3
ADD requirements.txt ./
RUN pip install -r requirements.txt
ADD ./main ./main
CMD [ "python", "./main/main.py"]
第一次运行此 O365 库时,您需要对其进行授权,然后它会存储o365_token.txt
它之后使用的 a。看起来像这样:
Visit the following url to give consent:
https://login.microsoftonline.com/common/oauth2/v2.0/authorize?resp....
Paste the authenticated url here:
这也发生在我的新 Docker 上,所以我通过 Bash 登录它:
docker run -it hvdveer/e2t-python bash
但是现在当我手动运行它时,它只是利用现有的令牌并且无需验证即可工作。删除令牌文件并再次授权也不起作用。为什么我自动运行时它要求授权,而手动运行时却没有?这些是不同的用户吗?我该如何解决这个问题?
解决方案
我修好了它!
CMD 从根目录运行,因此它正在那里寻找令牌。通过将 WORKDIR 更改为我的程序的主目录,它现在可以找到令牌:
FROM python:3
ADD requirements.txt ./
RUN pip install -r requirements.txt
WORKDIR /main
ADD ./main .
CMD [ "python", "./main.py"]
手动从 root 运行它并在 root 中创建令牌并没有解决问题的原因是因为这些更改没有保存。显然,每次关闭图像时,它都会忘记一切。活到老,学到老。
推荐阅读
- batch-file - 批处理文件以计算 .zip 文件中的文件
- mysql - Icinga2 没有写入 IDO 的 icinga 实例
- angular - 服务内部的角负载外部类
- angularjs - 无法直接使用浏览器 url 路由我该怎么办?
- java - 当我运行功能文件并收到错误时,我已经设置了所有基本插件和驱动程序
- javascript - EaselJS:将形状拉伸到特定的一侧
- android - 如何在 android 活动测试中模拟 koin 注入的 bean 并捕获作为该模拟参数给出的 lambda?
- forms - Drupal,hook_form_alter 在节点编辑/创建中添加字段
- network-programming - Sending Flash SMS in UCS2 (that is encoding) on smpp
- jenkins - 脚本化管道:包装阶段