将文件作为参数传递给Docker contain

2024-05-19 15:20:06 发布

您现在位置:Python中文网/ 问答频道 /正文

一个非常简单的python程序,假设当前目录是/python,我想把file.txt作为参数传递给python script boot.py,这里是我的Dockerfile

FROM python
COPY boot.py ./
COPY file.txt ./
RUN pip install numpy
CMD ["python", "boot.py", "file.txt"]

然后我用以下方法构建Docker容器:

docker build -t boot/latest .

然后运行容器

docker run -t boot:latest python boot.py file.txt

我得到了正确的结果。

但是,如果我将另一个文件file1.txt复制到当前目录(从另一个目录(不是/PYTHON))中,那么我将再次运行容器:

docker run -t boot:latest python boot.py file1.txt

我得到以下错误:

FileNotFoundError: [Errno 2] No such file or directory: 'file1.txt'

所以这个错误是因为file1.txt不在容器中,但是如果我和一个朋友共享这个容器,而这个朋友想传递一个非常不同的文件作为参数,那么我该如何编写Dockerfile,以便任何拥有我的容器的人都可以无误地传递非常不同的文件作为参数?提前谢谢。(我是Docker的新手)


Tags: 文件dockerrunpydockerfiletxt错误朋友
3条回答

如果我正确地理解了这个问题,你就承认文件不在容器中,你就在问如何最好地与世界共享容器,让人们在其中添加自己的内容。

您有两个选项,要么使用docker volumes,这允许您的朋友(和其他相关方)在docker容器中装载本地卷。也就是说,您可以将本地文件系统上的一个文件夹覆盖到容器中的一个文件夹上(当您在本地开发时,这通常也非常漂亮)

或者,同样,根据容器的用途,有人可以扩展您的图像。例如,Dockerfile

FROM yourdockerimage:latest
COPY file1.txt ./
CMD ["python", "boot.py", "file1.txt"]

选择最适合您的项目的选项。

那样不行。就像你说的,file1.txt不在容器中。

解决方法是使用Docker卷在运行主机时将文件从主机注入容器。

像这样的:

docker run -v /local/path/to/file1:/container/path/to/file.txt -t boot:latest python boot.py file1.txt

那么/local/path/to/file1将是主机上的路径,它将覆盖容器上的/container/path/to/file.txt

您也可以从STDIN读取脚本,然后使用cat将数据传递给docker。看看how to get docker container to read from stdin?

类似于:

cat /path/to/file | docker run -i --rm boot python boot.py

相关问题 更多 >