【问题标题】:Writing to a file inside a container写入容器内的文件
【发布时间】:2021-05-04 20:02:38
【问题描述】:

我有一个 Python 脚本,它运行一个查询并将输出打印到一个文本文件中。当我将它 Dockerize 时,没有创建输出文件。 Dockerfile如下:

FROM python:3
ADD cert_lamp.py /
ADD certificates.txt /
RUN pip install pyOpenSSL
RUN pip install numpy
RUN pip install cryptography
RUN pip install idna
CMD [ "python", "./cert_lamp.py" ]

cert.txt 是我需要添加输出的文件。这在脚本中被引用。如何将其添加到 Dockerfile?

【问题讨论】:

  • 我建议在 FROM python:3 之后添加 WORKDIR /app 以将工作目录从 / 更改为 /app
  • 文件是在 Docker 容器中创建的吗?
  • 您知道您可以使用:“docker exec -it /bin/bash” ssh 进入您的容器并执行 python 脚本并查看文件是否生成正确...如果是这种情况,那么答案 aSaffary 是从容器外的主机访问它的方法。
  • 您是否需要将文件放在构建的映像中(在这种情况下,您可以在构建时 COPYRUN 脚本)或者它是脚本的输出(在在哪种情况下,Python 虚拟环境可能更容易设置)?
  • 对不起,我有点迷路了。您能否澄清一下您是否只需要一个空文件到您的 docker 容器中?如果是的话,一个简单的touch 应该没问题。否则你能更好地澄清这个问题吗?该文件是否包含某些内容?是否需要将其暴露在容器外才能得到输出?

标签: python docker


【解决方案1】:

您需要使用VOLUME 将您的 docker 文件映射到您的主机文件。

FROM python:3
ADD cert_lamp.py /
ADD certificates.txt /
RUN pip install pyOpenSSL
RUN pip install numpy
RUN pip install cryptography
RUN pip install idna
VOLUME /path/to/cert.txt
CMD [ "python", "./cert_lamp.py" ]

在运行容器时:

docker run -v hostdirecotry:dockerdirectory my_image_name

附: docker 镜像是逐层创建的,为一个 dockerfile 写这么多行并不是一个好习惯。 COPY 你的整个项目目录,而不是 ADD- 一个一个地处理它们。并使用 requirements.txt 文件一次性安装所有 pip 包。

【讨论】:

  • Dockerfile 中的 VOLUME 是不必要的,而且大多会产生令人困惑的副作用(泄漏匿名卷并阻止 RUN 指令更改该目录)。
  • @DavidMaze 这不是必需的,但拥有它肯定比没有stackoverflow.com/questions/34809646/… 更好
猜你喜欢
  • 2013-08-01
  • 2010-11-09
  • 2016-09-28
  • 2012-05-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-31
  • 1970-01-01
相关资源
最近更新 更多