简体   繁体   中英

When I execute docker command from C# app I get "docker:invalid reference format" error

I've read all similar questions and found no answer. I have docker-command which perfectly works for me in Linux command bush (Ubuntu):

 docker run -it --rm \
        -v /home/source3/mySolution:/myProj \
        nosinovacao/dotnet-sonar:latest \
        bash -c \
            "cd myProj  \
            && dotnet /sonar-scanner/SonarScanner.MSBuild.dll begin \
            /k:testProj3 /name:testProj3 /version:1.0 \
            /d:sonar.host.url="http://192.168.1.98:9000" \
            /d:sonar.login="<myToken>" \
            && dotnet restore \
            && dotnet build -c Release \
            && dotnet /sonar-scanner/SonarScanner.MSBuild.dll end \
            /d:sonar.login="<myToken>""

It's Sonarcube scanner, which analyzes the project located in linux directory /home/source3/mySolution. Now I try to execute the same command by C# Console application. I tried to run application by Visual Studio and in Docker, the result is the same. My code is:

public void StartAnalysis(string projectName, string projectKey)
        {
            _logger.LogInformation($"{nameof(StartAnalysis)} called with params: {nameof(projectName)}: '{projectName}', {nameof(projectKey)}: '{projectKey}'");

            var command = @$"run -it --rm \
                          -v ""/home/source3/mySolution:/myProj"" \
                          nosinovacao/dotnet-sonar:latest \
                          bash -c \
                            ""cd myProj \
                            && dotnet /sonar-scanner/SonarScanner.MSBuild.dll begin \
                            /k:{projectKey} /name:{projectName} /version:1.0 \
                            /d:sonar.host.url=""{_baseUrl}"" \
                            /d:sonar.login=""{_token}"" \
                            && dotnet restore \
                            && dotnet build -c Release \
                            && dotnet /sonar-scanner/SonarScanner.MSBuild.dll end \
                            /d:sonar.login=""{_token}""""";

            var processInfo = new ProcessStartInfo("docker", command)
            {
                CreateNoWindow = true,
                UseShellExecute = false,
                RedirectStandardOutput = true,
                RedirectStandardError = true
            };

            int exitCode;
            using (var process = new Process())
            {
                process.StartInfo = processInfo;
                process.OutputDataReceived += ProcessOutputDataReceived;
                process.ErrorDataReceived += ProcessErrorDataReceived;

                process.Start();
                process.BeginOutputReadLine();
                process.BeginErrorReadLine();
                process.WaitForExit(1200000);
                if (!process.HasExited)
                {
                    process.Kill();
                }

                exitCode = process.ExitCode;
                process.Close();
            }
        }

The code above fails with "docker: invalid reference format". Will be appreciated for any help

The backslashes are there to tell the bash command line that more is coming. When running from C#, you don't need those.

With the way you've done it, your string also includes the CRLFs between each line. Those also have to go so you end up with a single long line with the command.

So something like this

var command = 
    "run -it --rm " +
    "-v ""/home/source3/mySolution:/myProj"" " +
    "nosinovacao/dotnet-sonar:latest " +
    "bash -c " +
    """cd myProj " +
    "&& dotnet /sonar-scanner/SonarScanner.MSBuild.dll begin " +
    $"/k:{projectKey} /name:{projectName} /version:1.0 " +
    $"/d:sonar.host.url=""{_baseUrl}"" " +
    $"/d:sonar.login=""{_token}"" " +
    "&& dotnet restore " +
    "&& dotnet build -c Release " +
    "&& dotnet /sonar-scanner/SonarScanner.MSBuild.dll end " +
    "/d:sonar.login=""{_token}""""";

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM