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

时间:2019-05-03 06:25:06

标签: python image docker containers

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

handler.py内,我们有一个函数greet这样

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

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

2 个答案:

答案 0 :(得分:2)

实际上,您在问两件事。一种如何从命令行调用python文件中的函数。两个如何通过Docker做到这一点。

首先,在handler.py中,您需要一个主要功能来执行此操作。例如这样的东西。

import sys


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

if __name__ == '__main__':
    greet(sys.argv[1])

运行它会给出:

$ python handler.py harshvardhan
Hello harshvardhan!

替代方法和更复杂的方法是使用OptionParser并基于此进行切换。 取决于您的用例,两者都可以。

对于docker,我想您不想更改入口点,而要更改CMD。 Dockerfile:

FROM python:2.7-alpine

WORKDIR /app

COPY handler.py .

ENTRYPOINT ["/usr/local/bin/python2.7"]
CMD ["/app/handler.py"]

构建图像:

$ docker build . -t local:dev

运行它,覆盖CMD

$ docker run local:dev /app/handler.py itismemario
Hello itismemario!

答案 1 :(得分:0)

您可以在docker运行期间提供python脚本执行命令,

docker run <image> python handler.py --user username_value

并确保您已在handler.py中使用argparse处理了args并调用了greet函数。

import argparse
parser = argparse.ArgumentParser(description='')
parser.add_argument('--user', help='username', required=True, type=str)