Запустить Docker-контейнер через функцию точки входа с аргументами - PullRequest
1 голос
/ 03 мая 2019

Предположим, у меня есть файл с именем handler.py внутри контейнера докера (который еще не запущен или не загружен из образа). Пусть имя изображения будет testimage.

Внутри handler.py, у нас есть функция greet такая, что

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

Теперь я хочу запустить свой док-контейнер из этого изображения так, чтобы я вызывал эту функцию greet внутри файла handler.py вместе с аргументом. Я хочу вызвать это при создании самого работающего контейнера.

Ответы [ 2 ]

2 голосов
/ 03 мая 2019

На самом деле вы спрашиваете две вещи. Один из способов вызова функции в файле 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!
0 голосов
/ 03 мая 2019

Вы можете предоставить команду выполнения скрипта Python во время запуска Docker, как показано ниже,

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

И убедитесь, что вы обработали эти аргументы с помощью argparse в handler.py и вызовите свою функцию greet.

import argparse
parser = argparse.ArgumentParser(description='')
parser.add_argument('--user', help='username', required=True, type=str)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...