将文件作为parameter passing给Docker容器

一个非常简单的python程序,假设当前目录是/ PYTHON,我想将file.txt作为parameter passing给python脚本boot.py,这里是我的Dockerfile

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

然后我用下面的代码构buildDocker容器:

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]没有这样的文件或目录:'file1.txt'

所以错误是由于file1.txt不在容器中,但如果我与朋友分享这个容器,朋友想传递一个非常不同的文件作为参数,我该怎么写Dockerfile,所以任何人与我的容器可以传递非常不同的文件作为参数没有错误? 提前致谢。 (我是Docker的新手)

它不会那样工作。 就像你说的,file1.txt不在容器中。

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

像这样的东西:

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

/ path / to / file1将是主机上的path,它将覆盖容器上的/path/to/file.txt。

所以你的朋友们可以在自己的主机上用自己的文件在/ path / to / file1上播放。

如果我正确地理解了这个问题,那么您承认文件不在容器中,而且您正在问如何最好地与世界共享容器,从而允许人们将自己的内容添加到该容器中。

您有几个选项,可以使用docker卷 ,它允许您的朋友(和其他感兴趣的团体)在Docker容器中装入本地卷。 也就是说,您可以将本地文件系统上的文件夹覆盖到容器内的文件夹中(当您在本地进行开发时,这通常也非常漂亮)

或者,再次,根据你的容器的目的,有人可以扩展你的形象。 例如,像一个Dockerfile

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

select适合您的项目的最佳select。