通过带有参数的入口点函数启动 docker 容器

har*_*han 6 python containers image docker

假设我有一个在 docker 容器内调用的文件handler.py(尚未运行或从映像启动)。令图像名称为testimage

在里面handler.py,我们有一个函数,greet这样

def greet(username):
    print("Hello %s!"%(username))
Run Code Online (Sandbox Code Playgroud)

现在我想从此图像启动我的 docker 容器,以便我greet在文件内调用此函数handler.py以及参数。我想在创建正在运行的容器本身时调用它。

The*_*jot 5

其实你问的是两件事。一种如何从命令行调用 python 文件中的函数的方法。两个如何通过 Docker 执行此操作。

首先,在 handler.py 中,您需要一个 main 函数才能执行此操作。例如这样的事情。

import sys


def greet(username):
    print("Hello %s!"%(username))

if __name__ == '__main__':
    greet(sys.argv[1])
Run Code Online (Sandbox Code Playgroud)

运行它给出:

$ python handler.py harshvardhan
Hello harshvardhan!
Run Code Online (Sandbox Code Playgroud)

另一种更复杂的方法是使用 OptionParser 并基于此进行切换。根据您的用例,两者都有效。

对于docker,我认为你不想改变入口点,而是改变CMD。Dockerfile:

FROM python:2.7-alpine

WORKDIR /app

COPY handler.py .

ENTRYPOINT ["/usr/local/bin/python2.7"]
CMD ["/app/handler.py"]
Run Code Online (Sandbox Code Playgroud)

构建图像:

$ docker build . -t local:dev
Run Code Online (Sandbox Code Playgroud)

运行它,覆盖CMD

$ docker run local:dev /app/handler.py itismemario
Hello itismemario!
Run Code Online (Sandbox Code Playgroud)