我的Dockerfile
运行一个python脚本,需要从本地计算机读取文本文件。
Dockerfile
FROM fedeg/python-vim:2
ADD . /code
WORKDIR /code
RUN pip install -r requirements.txt
COPY file.txt /data/file.txt
CMD ["python", "run.py"]
在run.py中有一个函数可以读入文本文件:
def read_file(filename):
lines = [line.rstrip('\n') for line in open(filename)]
return lines
我想知道如果我将此图像传递给其他人并且他们运行它,file.txt是否已经保存在图像中,或者docker能够在该人的本地计算机中查找该file.txt图像是否已启动?
我想要的是Docker在运行图像的任何机器上查找名称file.txt
,这样它就可以处理另一个file.txt的内容而不是我提供的file.txt我的本地机器。
答案 0 :(得分:2)
正如@herm通过构建容器所指出的那样,file.txt存储在容器中。
要实现您想要的效果,请从Dockerfile中删除COPY,然后在运行时使用-v选项在主机上挂载包含file.txt的文件夹:
docker run -v /folder/with/file:/data image_name
其中/ folder / with / file是包含file.txt的文件夹的路径,image_name是docker容器的名称。
正在运行的容器中的/ data内容现在将是/ folder / with / file文件夹的内容。
编辑:
您也可以只安装文件:
docker run -v /folder/with/file/file.txt:/data/file.txt image_name
但是请注意,如果您需要编辑文件,这可能会出现问题。请参阅Docker Docs"将主机文件作为数据卷安装"
注意:许多用于编辑文件的工具(包括vi和sed --in-place)可能会导致inode更改。从Docker v1.1.0开始,这将产生一个错误,例如“sed:无法重命名./sedKdJ9Dy:设备或资源忙”。在您要编辑已安装文件的情况下,通常最容易安装父目录。
答案 1 :(得分:1)
是的,它保存在图像中。
图像包含您在dockerfile中描述的所有更改。在那里发生的任何事情都是图像的一部分,并且可以由你给图像的人使用。
使用docker run或docker服务创建的容器上发生的任何事情都不会影响您的图像。如果你想要,你可以使用docker提交容器将其转换为新图像。