#pragma warning restore CS1998 // Async method lacks 'await' operators and will run synchronously public virtual async Task Notify(String pathChanged) { using (DockerClient client = new DockerClientConfiguration(new Uri(DockerNotifier.DOCKER_URI)).CreateClient()) { String dockerPath = m_Notifier.GetDockerDirectory(pathChanged); ContainerExecCreateResponse response = await client.Containers.ExecCreateContainerAsync(m_Notifier.m_Container, new ContainerExecCreateParameters { AttachStderr = false, AttachStdin = false, AttachStdout = m_HandleError, Cmd = new String[] { m_Shell, m_ShellOptions, String.Format(m_ShellCommand, dockerPath) }, Detach = false, Tty = false, User = "******", Privileged = true }); using (var stream = await client.Containers.StartAndAttachContainerExecAsync(response.ID, false, default(CancellationToken))) { if (m_HandleError) { await PostProcess(pathChanged, stream); } } m_Notifier.LogMessage($"Notify {pathChanged} mapped tp {dockerPath} has changed into {m_Notifier.m_Container}"); } }
public static async Task InvokeCommand( ContainerExecCreateParameters parameters, IImageSettings settings) { ContainerExecCreateResponse response = await _client.Containers .ExecCreateContainerAsync( settings.ContainerId, parameters); if (!string.IsNullOrEmpty(response.ID)) { using (MultiplexedStream stream = await _client.Containers .StartAndAttachContainerExecAsync( response.ID, false)) { (string stdout, string stderr)output = await stream .ReadOutputToEndAsync(CancellationToken.None); if (!string.IsNullOrEmpty(output.stderr) && output.stderr.Contains("error")) { var error = new StringBuilder(); error.AppendLine($"Error when invoking command \"{string.Join(" ", parameters.Cmd)}\""); error.AppendLine(output.stderr); throw new ContainerException(error.ToString()); } } } }
private async Task CreateKuduContainer(DockerClient client, string name, string runtimeName, string stack, string version, string appDir, string image) { string bindPort = "8080"; string helloWorldApp = $"{Environment.CurrentDirectory}/{appDir}"; string port = new Random().Next(10000, 65635).ToString(); string localImageName = image.Replace("public/appsvc/", ""); CreateContainerParameters containerConfig = new CreateContainerParameters { Name = name, Image = localImageName, ExposedPorts = new Dictionary <string, EmptyStruct> { { bindPort, new EmptyStruct() } }, Volumes = new Dictionary <string, EmptyStruct> { { "/home/site", new EmptyStruct() } }, HostConfig = new HostConfig { PortBindings = new Dictionary <string, IList <PortBinding> > { { bindPort, new List <PortBinding> { new PortBinding { HostIP = "localhost", HostPort = port } } } }, Binds = new List <String> { $"{helloWorldApp}:/home/site/" } }, Env = new List <String> { $"WEBSITE_SITE_NAME={runtimeName}", $"APPSETTING_WEBSITE_SITE_NAME={runtimeName}", "ORYX_ENV_TYPE=AppService", $"ORYX_ENV_NAME=~1{runtimeName}", "ENABLE_ORYX_BUILD=true", $"FRAMEWORK={stack.ToUpper()}", $"FRAMEWORK_VERSION={version}", "APPSETTING_SCM_USE_LIBGIT2SHARP_REPOSITORY=0", $"HTTP_HOST=localhost:{bindPort}" }, Cmd = new List <String> { "1006", "8e62d73f722067ccb9936a1e", "1003", "8e62d73f722067ccb9936a1e", runtimeName }, }; await client.Containers.CreateContainerAsync(containerConfig); await client.Containers.StartContainerAsync(name, new ContainerStartParameters()); Thread.Sleep(10 * 1000); ContainerExecCreateResponse resp = await client.Containers.ExecCreateContainerAsync(name, new ContainerExecCreateParameters() { Cmd = new List <String> { "benv", "dotnet=2.2.8", "dotnet", "/opt/Kudu/KuduConsole/kudu.dll", "/home/site", "/home/site/wwwroot", }, }); await client.Containers.StartContainerExecAsync(resp.ID); Thread.Sleep(10 * 1000); }