我想在开始之前说,这不是关于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而不能使用入口点来编写我的脚本.

推荐答案

你的文件没问题...不过,CMD arg1 arg2CMD ["arg1", "arg2"](带括号)之间是有区别的,所以这至少可以解释some difference.

当它到达一些spark 源代码时

您可以设置ENV PYSPARK_PYTHON=/opt/conda/bin/python来更改Spark使用的解释器.

Python相关问答推荐

如何修复使用turtle和tkinter制作的绘画应用程序的撤销功能

Pydantic:如何将对象列表表示为dict(将列表序列化为dict)

查找下一个值=实际值加上使用极点的50%

Python中MongoDB的BSON时间戳

如何使用matplotlib在Python中使用规范化数据和原始t测试值创建组合热图?

带条件计算最小值

优化pytorch函数以消除for循环

如何获取TFIDF Transformer中的值?

Python,Fitting into a System of Equations

将9个3x3矩阵按特定顺序排列成9x9矩阵

将输入聚合到统一词典中

创建可序列化数据模型的最佳方法

如果满足某些条件,则用另一个数据帧列中的值填充空数据帧或数组

如何根据一列的值有条件地 Select 前N组?

为什么if2/if3会提供两种不同的输出?

matplotlib + python foor loop

ruamel.yaml dump:如何阻止map标量值被移动到一个新的缩进行?

OpenGL仅渲染第二个三角形,第一个三角形不可见

根据客户端是否正在传输响应来更改基于Flask的API的行为

BeautifulSoup-Screper有时运行得很好,很健壮--但有时它失败了::可能这里需要一些更多的异常处理?