将文件从docker卷导出到另一个目录

时间:2017-12-26 06:00:22

标签: python docker

我有一个python代码,它从文件中读取数据并进行一些计算并将结果保存到输出文件中。该代码还将日志保存在日志文件中。所以在我目前的目录中,我有以下文件:

1. code.py  --> The main python application
2. input.json --> This json file is used to take input data
3. output.json --> The output data is saved in this file.
4. logfile.log --> This file saves the log.

以上所有文件都在目录Application内。完整路径为/home/user/Projects/Application/。现在当我运行code.py时,我得到了预期的结果。所以我使用下面的Dockerfile

将上面的代码转换为docker
FROM python:3

ADD code.py /

ADD input.json /

ADD output.json /

ADD logfile.log /

CMD [ "python3", "./code.py" ]

当我运行docker容器时,它运行正常但我无法在output.jsonlogfile.log中看到输出数据和日志。然后我在文件系统中搜索了这些文件,并在以下目录中找到了这些文件:

/var/lib/docker/overlay2/7c237c143f9f2e711832daccecdfb29abaf1e37a4714f34f34870e0ee4b1af07/diff/home/user/Projects/Application/

我的所有文件都在该目录中。我检查了日志和数据,它就在那里。然后我明白所有文件都将保存在docker卷中,而不是保存在当前目录中。

有什么方法可以保存当前目录/home/user/Projects/Application/中的文件和所有数据而不是docker,因为通过这种方式我可以轻松检查输出。

由于

2 个答案:

答案 0 :(得分:0)

您可以尝试按以下方式运行容器:[您可能不需要构建图像]

docker run --rm -v /home/user/Projects/Application/:/home/user/Projects/Application/ -d python:3 /home/user/Projects/Application/code.py

-v;将mount本地文件夹绑定到/ home / user / Projects / Application /中的容器中。

如果您不需要,请随意取出--rm

请确保code.py将日志写入/home/user/Projects/Application/logfile.log

要验证文件和文件夹是否有运行命令: docker run --rm -v /home/user/Projects/Application/:/home/user/Projects/Application/ -d python:3 sh

这将使您进入终端,您可以列出文件并确保所需的文件和配置在那里。

答案 1 :(得分:0)

文件位于docker overlay卷下,因为您没有进行卷安装。要解决此问题,您可以将Dockerfile修改为与此类似:

FROM python:3
RUN mkdir /app
ADD code.py /app
ADD input.json /app
ADD output.json /app
ADD logfile.log /app
WORKDIR /app
VOLUME /app
CMD [ "python3", "./code.py" ]

然后在你的docker run命令中,确保你传递了这个选项:

-v /home/user/Projects/Application:/app

有关容器选项的更多信息,请访问https://www.aquasec.com/wiki/display/containers/Docker+Containers

如果您使用的是docker compose,则需要添加:

volumes:
    - /home/user/Projects/Application: /var/www/app