Невозможно передать аргументы docker создать в azure пакет - PullRequest
0 голосов
/ 12 марта 2020

Я настраиваю Azure Пакетный рабочий процесс, который включает в себя задание, выполняемое внутри контейнера docker. Типичная пакетная настройка с контейнером включает определение функции add_tasks, которое устанавливает различные настройки контейнера и команды, которые передаются для фактического выполнения задания. Соответствующие элементы моей функции add_tasks следующие:

task_container_settings=batchmodels.TaskContainerSettings(
        image_name=config._DOCKER_IMAGE,
        container_run_options='--rm'
)

и:

task = batchmodels.TaskAddParameter(
        id=task_id,
        command_line="conda run -n pointcloudz python /classify.py {} {}".format(
            input_file, output_file),
        container_settings=task_container_settings,
        user_identity=batchmodels.UserIdentity(auto_user=user)
)

Согласно документации Azure Batch, container_run_options устанавливается с помощью task_container_settings передаются на docker create. Аргумент command_line task должен переопределить любой ENTRYPOINT, определенный в Dockerfile. Я попытался передать необходимые аргументы (input_file и output_file), используя различные комбинации container_run_options из task_container_settings и command_line. Независимо от комбинации, задание никогда не завершится и будет выполняться в течение 30 минут до истечения времени ожидания. Нет сообщения об ошибке.

Следующая комбинация команд docker create и docker start для контейнера за пределами Batch работает, как и ожидалось, что весьма разочаровывает:

docker create -i -t <my image> in.txt out.txt

docker start -a -i <resulting container>

Итак, предположительно, я мог бы просто передать аргументы input_file и output_file аргументу command_line task, но это не сработало. Для полноты, вот моя полная функция add_task:

def add_tasks(batch_service_client, job_id, task_id, input_file, output_file):
    """
    Adds a task for each input file in the collection to the specified job.

    :param batch_service_client: A Batch service client.
    :type batch_service_client: `azure.batch.BatchServiceClient`
    :param str job_id: The ID of the job to which to add the tasks.
     created for each input file.
    :input_file: unclassified .las file
    :output_file: classified .las file output
    """
    print('Adding tasks to job[{}]...'.format(job_id))

    user = batchmodels.AutoUserSpecification(
        scope=batchmodels.AutoUserScope.task,
        elevation_level=batchmodels.ElevationLevel.non_admin
    )

    task_container_settings=batchmodels.TaskContainerSettings(
        image_name=config._DOCKER_IMAGE,
        container_run_options='--rm'
    )

    task = batchmodels.TaskAddParameter(
        id=task_id,
        command_line="conda run -n pointcloudz python /classify.py {} {}".format(
            input_file, output_file),
        container_settings=task_container_settings,
        user_identity=batchmodels.UserIdentity(auto_user=user)
    )

    batch_service_client.task.add(job_id, task)

и мой dockerfile (изображение извлекается из репозитория Azure как часть настройки Batch):

FROM continuumio/miniconda3

ADD . /pipegen

ADD environment.yml /tmp/environment.yml
RUN conda env create -f /tmp/environment.yml

RUN echo "conda activate $(head -1 /tmp/environment.yml | cut -d' ' -f2)" >> ~/.bashrc

ENV PATH /opt/conda/envs/$(head -1 /tmp/environment.yml | cut -d' ' -f2)/bin:$PATH
ENV CONDA_DEFAULT_ENV $(head -1 /tmp/environment.yml | cut -d' ' -f2)

ADD classify.py /classify.py

RUN rm -rf /pipegen

ENTRYPOINT ["conda", "run", "-n", "pointcloudz", "python", "classify.py"]

Заранее спасибо за любую помощь здесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...