基于接受命令行参数的单独自定义映像创建docker映像



我认为我没有正确的标题,但我不能100%确定正确的标题。我正在尝试将我拥有的Python程序容器化,该程序可以基于CLI参数作为服务器或客户端运行。我之所以能够成功地做到这一点,是因为我说:

FROM python:3.5
ADD program/ program/
WORKDIR program/
ENTRYPOINT ["python", "program.py"]

然后我可以用CCD_ 1(或CCD_。

不过,当我试图根据以前的图像创建图像时,我遇到了问题。

例如,如果我想创建一个特定于服务器的映像,我尝试过:

FROM program
ENTRYPOINT ["server"]

然后我的目标是通过说docker run programServer <port> <protocol>来运行它,但是当我尝试时,我会得到executable file not found in $PATH"错误。

是我错过了什么,还是你不能";菊花链";这样的图像?

两条备注:

  1. 每个映像应包含一个ENTRYPOINT和/或一个CMD(在Dockerfile中定义或从其父映像继承(;

  2. 每个ENTRYPOINT行覆盖以前的ENTRYPOINT定义(因为Docker容器旨在运行一个进程,称为入口点(。

所以:

  • 您应该只在第二个Dockerfile中编写ENTRYPOINT ["python", "program.py", "server"](用于子映像(
  • 但您也可以将docker run -d program server <port> <protocol>0保留在您的第一个Dockerfile(用于父映像(中,因为这不会造成任何伤害,并且允许解决上面的规则1

但是如果父映像打算用作基本映像,则永远不要运行";"照原样";,并且不产生自然入口点,例如,您可以只放置一个打印警告/错误的伪CMD,或者一个shell——例如,请参阅debian:10的Dockerfile。

有关{ENTRYPOINTCMD}的更多详细信息,请参阅以下SO答案:Dockerfile中的CMD和ENTRYPOINT之间有什么区别?

最新更新