Warning

This document is for an old release of Galaxy. You can alternatively view this page in the latest release if it exists or view the top of the latest release's documentation.

Source code for galaxy.tool_util.deps.dockerfiles

import logging
import os

from galaxy.tool_util.deps import docker_util
from galaxy.tool_util.deps.container_classes import docker_cache_path
from galaxy.tool_util.deps.requirements import parse_requirements_from_xml
from galaxy.tool_util.loader_directory import load_tool_elements_from_path
from galaxy.util import commands

log = logging.getLogger(__name__)


[docs]def docker_host_args(**kwds): return dict( docker_cmd=kwds["docker_cmd"], sudo=kwds["docker_sudo"], sudo_cmd=kwds["docker_sudo_cmd"], host=kwds["docker_host"], )
[docs]def dockerfile_build(path, dockerfile=None, error=log.error, **kwds): expected_container_names = set() tool_directories = set() for (tool_path, tool_xml) in load_tool_elements_from_path(path): requirements, containers = parse_requirements_from_xml(tool_xml) for container in containers: if container.type == "docker": expected_container_names.add(container.identifier) tool_directories.add(os.path.dirname(tool_path)) break if len(expected_container_names) == 0: error("Could not find any docker identifiers to generate.") if len(expected_container_names) > 1: error("Multiple different docker identifiers found for selected tools [%s]", expected_container_names) image_identifier = expected_container_names.pop() dockerfile = __find_dockerfile(dockerfile, tool_directories) if dockerfile is not None: docker_command_parts = docker_util.build_command(image_identifier, dockerfile, **docker_host_args(**kwds)) else: docker_command_parts = docker_util.build_pull_command(image_identifier, **docker_host_args(**kwds)) commands.execute(docker_command_parts) commands.execute(docker_command_parts) docker_image_cache = kwds["docker_image_cache"] if docker_image_cache: destination = docker_cache_path(docker_image_cache, image_identifier) save_image_command_parts = docker_util.build_save_image_command( image_identifier, destination, **docker_host_args(**kwds) ) commands.execute(save_image_command_parts)
def __find_dockerfile(dockerfile, tool_directories): if dockerfile is not None: return dockerfile search_directories = ["."] if len(tool_directories) == 1: tool_directory = tool_directories.pop() search_directories.insert(0, tool_directory) for directory in search_directories: potential_dockerfile = os.path.join(directory, "Dockerfile") if os.path.exists(potential_dockerfile): return potential_dockerfile return None