将文件从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目录中。 完整path是/home/user/Projects/Application/ 。 现在,当我运行code.py我得到了预期的结果。 所以我通过使用下面的Dockerfile将上面的代码转换成Dockerfile

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

当我运行docker容器时,运行正常,但是我看不到output.jsonlogfile.log的输出数据和日志。 然后我在文件系统中search这些文件,并在以下目录中find这些文件:

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

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

有什么办法可以保留我的当前目录/home/user/Projects/Application/的文件和所有数据,而不是docker,因为这样可以很容易地检查输出。

谢谢

你可以尝试运行你的容器如下:[你可能不需要build立你的形象]

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

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

如果你不需要,可以随时取出--rm

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

要validation文件和文件夹是不是通过运行命令: docker run --rm -v /home/user/Projects/Application/:/home/user/Projects/Application/ -d python:3 sh

这将使你在一个terminal,你可以列出文件,并确保所需的文件和configuration在那里。

这些文件位于Docker覆盖卷下,因为您没有进行卷装入。 为了克服这个问题,你可以修改你的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