in composer_local_dev/environment.py [0:0]
def create_docker_container(self):
"""Creates docker container.
Raises when docker container with the same name already exists.
"""
LOG.debug("Creating container")
db_extras = self.database_extras
grouped_db_mounts = db_extras["mounts"]
db_mounts = {
**grouped_db_mounts['files'],
**grouped_db_mounts['folders'],
}
mounts = get_image_mounts(
self.env_dir_path,
self.dags_path,
utils.resolve_gcloud_config_path(),
utils.resolve_kube_config_path(),
self.requirements_file,
db_mounts,
)
db_vars = db_extras["env_vars"]
default_vars = get_default_environment_variables(
self.dag_dir_list_interval, self.project_id, db_vars
)
env_vars = {**default_vars, **self.environment_vars}
if (
platform.system() == "Windows"
and env_vars["COMPOSER_CONTAINER_RUN_AS_HOST_USER"] == "True"
):
raise Exception(
"COMPOSER_CONTAINER_RUN_AS_HOST_USER must be set to `False` on Windows"
)
ports = {
f"8080/tcp": self.port,
}
entrypoint = f"sh {constants.ENTRYPOINT_PATH}"
memory_limit = constants.DOCKER_CONTAINER_MEMORY_LIMIT
try:
container = self.create_container(
image=self.image_tag,
name=self.container_name,
entrypoint=entrypoint,
environment=env_vars,
mounts=mounts,
ports=ports,
mem_limit=memory_limit,
detach=True,
)
except docker_errors.ImageNotFound:
LOG.debug(
"Failed to create container with ImageNotFound error. "
"Pulling the image..."
)
self.pull_image()
container = self.create_container(
image=self.image_tag,
name=self.container_name,
entrypoint=entrypoint,
environment=env_vars,
mounts=mounts,
ports=ports,
mem_limit=memory_limit,
detach=True,
)
except docker_errors.APIError as err:
error = f"Failed to create container with an error: {err}"
if is_mount_permission_error(err):
error += constants.DOCKER_PERMISSION_ERROR_HINT.format(
docs_faq_url=constants.COMPOSER_FAQ_MOUNTING_LINK
)
raise errors.EnvironmentStartError(error)
copy_to_container(container, self.entrypoint_file)
copy_to_container(container, self.run_file)
return container