【问题标题】:Python file writing is not working inside dockerPython文件写入在docker内部不起作用
【发布时间】:2020-06-15 18:54:57
【问题描述】:

我正在尝试对 python 脚本进行 dockerize,其中存在文本文件和 CSV 文件的文件写入。但它不起作用,文件没有生成。

作为参考,我的代码是

FROM python:3



ADD ./HMS.py /
ADD ./constants.py /
ADD ./Docker.py /
ADD ./SNT.py /
ADD ./Utility.py /


RUN pip install --trusted-host pypi.org --trusted-host files.pythonhosted.org docker
RUN pip install --trusted-host pypi.org --trusted-host files.pythonhosted.org grepfunc
RUN pip install --trusted-host pypi.org --trusted-host files.pythonhosted.org requests


CMD [ "python", "./HMS.py" ]

但是,当我在外面运行 python 脚本时,我能够生成文件。我可以知道为什么它没有在工作目录中生成。

更新

    def write_log(self, filename, message, type='info'):
        with open(filename, 'a') as log:
            log.write('\n' + message)

    def write_csv(self, filepath, data):
        with open(filepath, 'a', newline='') as file:
            writer = csv.writer(file)
            writer.writerow(data)

常量文件包含路径

LOG_FILE='./snt_alarm_log.txt'
COMPONENT_NAME='SNT Alarm'
DB_FILE='./snt.csv'

【问题讨论】:

  • 你使用什么标志来启动 docker 容器?你能粘贴整个 docker run 命令吗?
  • 你是如何运行容器的?输出是什么?如果HMS.py很简单,我们来看看。否则,请尝试使用仅写入文件的简单脚本重现该问题。另外,我认为您那里有一些不必要的ADD 命令。
  • @prithajnath docker run sntalarmdocker_snt
  • 我们会将一些消息和状态写入txt文件和CSV文件
  • HMS.py 到控制台的输出只是 UP 或 DOWN。但是我们正在将一些消息和状态写入文本文件和 CSV 文件

标签: python docker


【解决方案1】:

容器本质上是短暂的。如果要保留容器内生成的文件,则需要将主机文件系统挂载到容器的文件系统中。挂载卷的方式有很多种,但最常见的方式是绑定挂载

docker run -v /path/to/host:/project sntalarmdocker_snt

保存到 /project 的任何内容都将在 /path/to/host 中可见,即使在容器被杀死后也是如此

【讨论】:

  • 如何找到容器的路径?
  • 它通常是您的WORKDIR,所以在您的情况下它将是/project。我更新了原帖
  • 但是还是无法获取需要python生成的文件
  • 其实 sntalarmdocker_snt 是一个 docker 镜像而不是容器
  • 甚至无法查看日志文件
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-01
相关资源
最近更新 更多