首页 > 解决方案 > 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

但是现在当我手动运行它时,它只是利用现有的令牌并且无需验证即可工作。删除令牌文件并再次授权也不起作用。为什么我自动运行时它要求授权,而手动运行时却没有?这些是不同的用户吗?我该如何解决这个问题?

标签: pythondocker

解决方案


我修好了它!

CMD 从根目录运行,因此它正在那里寻找令牌。通过将 WORKDIR 更改为我的程序的主目录,它现在可以找到令牌:

FROM python:3
ADD requirements.txt ./
RUN pip install -r requirements.txt
WORKDIR /main
ADD ./main .
CMD [ "python", "./main.py"]

手动从 root 运行它并在 root 中创建令牌并没有解决问题的原因是因为这些更改没有保存。显然,每次关闭图像时,它都会忘记一切。活到老,学到老。


推荐阅读