示例#1
0
#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}");
            }
        }
示例#2
0
        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());
                    }
                }
            }
        }
示例#3
0
        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);
        }