public async Task<IActionResult> Run(string serviceName, [FromBody]RunOptions options) { var website = await this.client.GetWebsite(serviceName); if(website == null) return this.NotFound(); if(website.DockerUrl != null) { return this.BadRequest("This website is already a container. Do a start instead. Url: " +website.DockerUrl); } var result = await DockerService.RunDockerImage(website.Name, options.port, "./"); if(result.Any(p => p.IsError && !String.IsNullOrEmpty(p.Message))) { return this.BadRequest("Cannot create container for running."); } var containerId = await DockerService.GetContainerId(website.Name); var ports = await DockerService.GetContainerPortsExposed(containerId); var containerPort = ports.Select(p => p.Split(" -> ")[1]).FirstOrDefault(); if(containerPort == null) return this.BadRequest("Could not get port manually."); website.DockerUrl = new Uri($"{bindingAddress}:{containerPort}"); await this.client.UpdateWebsite(website.Name, website); return this.Ok("Ok"); }