繁体   English   中英

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

[英]Start docker container through an entry point function with arguments

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

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

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

现在,我想从这个图片开始我的搬运工容器,这样我调用此函数greet里面的文件handler.py与参数一起。 我想在创建正在运行的容器本身时调用它。

实际上,您在问两件事。 一种如何从命令行调用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和基于此的开关。 取决于您的用例,两者都可以。

对于泊坞窗,我想您不想更改入口点,而要更改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!

您可以在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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM