Выход из кода 125 из Docker при попытке программного запуска контейнера - PullRequest
0 голосов
/ 05 декабря 2018

Я пытаюсь заставить работать интеграционный тест.На этапе инициализации теста я пытаюсь раскрутить сервер Redis из образа докера.

var p = new Process { StartInfo = new ProcessStartInfo("docker", "run --name redistest –p 6379:6379 redis")};
p.Start();

Когда я это делаю, процесс завершается с кодом выхода 125 .Если я закомментирую эти строки, попаду в точку останова в тесте перед выполнением тестового кода и вместо этого запусту из командной строки

docker run --name redistest -p 6379:6379 redis

, тест будет выполняться, как и ожидалось, при продолжении с точки останова. 125 существующий код просто означает, что docker run не удалось, поэтому больше информации не требуется.

До вызова командной строки или вызова C # я удостоверился, чтонет контейнера с именем redistest с

docker stop redistest
docker rm redistest

Однако разница в поведении сохраняется.Все эти попытки запустить Docker программно завершаются неудачно:

  • добавление -d
  • , работающего от имени обычного пользователя
  • , работающего с повышенными привилегиями
  • выполняется из теста
  • , запущенного из консольного приложения .NET Framework

Почему программный процесс создания команды docker run приводит к выходу Docker с 125?

Программно работает просто отлично для некоторых изображений, но не для других.

Ответы [ 3 ]

0 голосов
/ 21 декабря 2018

Мне не удалось выяснить причину, по которой я не смог запустить контейнер, и на самом деле это случилось с несколькими другими.Я все еще ищу ответ, но здесь есть обходной путь, если он кому-то нужен.

Сообщение в блоге Интеграционное тестирование с использованием Docker-контейнера описывает код, который необходимо написать для использованияпакет Docker.DotNet NuGet, который является клиентом, взаимодействующим с Docker SDK .

Теперь я могу поместить этот код в тестовое приложение интеграции:

    [AssemblyInitialize]
    public static async Task InitializeDockerContainers(TestContext testContext)
    {
        await DockerSupport.StartDockerContainer("my container", "redis", "4.0.5-alpine", 6379);
    } 

и объедините его с (моими уже работающими) командами stop и rm, чтобы обеспечить чистое создание и удаление контейнеров во время интеграционного тестирования.

0 голосов
/ 17 января 2019

Несмотря на то, что это месяц, я недавно тоже столкнулся с этой проблемой.После удаления --name из команды run все заработало без нареканий.Я не мог понять, почему он так себя ведет, но я публикую это здесь, чтобы люди могли увидеть, где нет необходимости указывать имя.

0 голосов
/ 21 декабря 2018

В .NET Framework UseShellExecute включено по умолчанию.Это изменяет текущий каталог для нового процесса.

...