我想在开始之前说,这不是关于cmd和入口点+cmd之间的区别的general question.我以为我理解了它们的一般区别以及如何使用它们,但我遇到了一个可能与Entry Point+cmd更微妙的问题.
我试图编写一个简单的图像(称为Image2),它从基本上包含我的环境的另一个图像(称为Image1)中提取.这样做的目的是环境是非常静态的,但我可能希望对运行代码的容器进行细微差别的更改.我对这张照片的看法是这样的:
FROM image1
ENTRYPOINT [ "/opt/conda/bin/python" ]
CMD [ "/tmp/script.py" ]
我想以这种方式编写它,以限制该容器的用途(运行一个python脚本).然而,当我在容器外部运行它时,这会抛出一个错误.它将启动脚本并运行一段时间,但当它转到一些PySpark代码时,它将导致以下结果:
java.io.IOException: Cannot run program "python3": error=2, No such file or directory
派斯帕克突然想要使用Python 3,但我不知道它为什么要这么做.
但是,如果我将Dockerfile更改为以下内容:
FROM image1
CMD /opt/conda/bin/python /tmp/script.py
然后它运行得很好,没有错误.所以我想知道是否有人能解释为什么我可以单独使用CMD而不能使用入口点来编写我的脚本.