Вывод команды Docker ps пуст при добавлении команды в раздел image.run()

Среда:

  • версия плагина docker: 1.1.2;
  • версия Дженкинса: 2.0.50727;
  • версия клиент / сервер докера: 17.12.0-ce;
  • Win 10 Pro x64;

Сценарий 1. Я пытаюсь запустить образ Selenoid через Jenkinsfile с помощью следующей команды:

stage('Start services') {
        docker.image('aerokube/selenoid').
                run('--name selenoid ' +
                        '-p 4444:4444 ' +
                        '-v C:/workspace/selenoid:/etc/selenoid ' +
                        '-v C:/workspace/output:/opt/selenoid/video ' +
                        '-v //var/run/docker.sock:/var/run/docker.sock ' +
                        '-e "OVERRIDE_VIDEO_OUTPUT_DIR=/C/workspace/output/"')
}

Фактический результат: контейнер создан, и я вижу контейнер Selenoid в выводе Docker PS.

Сценарий 2:

Когда я добавляю любую команду после точки - контейнер не создается. Пожалуйста, смотрите следующее:

stage('Start services') {
        docker.image('aerokube/selenoid').
                run('--name selenoid ' +
                        '-p 4444:4444 ' +
                        '-v C:/workspace/selenoid:/etc/selenoid ' +
                        '-v C:/workspace/output:/opt/selenoid/video ' +
                        '-v //var/run/docker.sock:/var/run/docker.sock ' +
                        '-e "OVERRIDE_VIDEO_OUTPUT_DIR=/C/workspace/output/"',
                '-video-output-dir /output')
}

В этом сценарии я добавил -video-output-dir /output, Кстати, я пытаюсь добавить следующую команду после точки: -limit 10, -conf /etc/selenoid/browsers.json но безрезультатно.

Также, пожалуйста, смотрите следующие журналы от работы Jenkins:

[Pipeline] sh
[C:\Jenkins\workspace\pplication_react-app_master-6UL22J3ZHJJMMTIKZO5LDRETFMNMM4TSEGGCZJKAGTM5HBOEAEYQ] Running shell script
+ docker run -d --name selenoid -p 4444:4444 -v C:/workspace/selenoid:/etc/selenoid -v C:/workspace/output:/opt/selenoid/video -v //var/run/docker.sock:/var/run/docker.sock -e OVERRIDE_VIDEO_OUTPUT_DIR=/C/workspace/output/ aerokube/selenoid -video-output-dir /output
[Pipeline] dockerFingerprintRun
[Pipeline] bat
[pplication_react-app_master-6UL22J3ZHJJMMTIKZO5LDRETFMNMM4TSEGGCZJKAGTM5HBOEAEYQ] Running batch script

C:\Jenkins\workspace\pplication_react-app_master-6UL22J3ZHJJMMTIKZO5LDRETFMNMM4TSEGGCZJKAGTM5HBOEAEYQ>docker ps 
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

Docker ps вывод команды пуст...

Что я делаю не так? Может я так не делаю args перенести в раздел run()?

1 ответ

Посмотрите на Selenoid Dockerfile. Важные строки:

ENTRYPOINT ["/usr/bin/selenoid"]

CMD ["-listen", ":4444", "-conf", "/etc/selenoid/browsers.json", "-video-output-dir", "/opt/selenoid/video/"]

Это означает, что команда точки входа всегда выполняется и все внутри CMD применяется только если аргументы не передаются явно. В вашем случае вы добавляете свои собственные аргументы:

'-video-output-dir /output'

Это означает CMD содержание раздела больше не применяется. Но -conf является обязательным аргументом, который по умолчанию config/browsers.jsonне /etc/selenoid/browsers.json, Поэтому правильное решение - добавить -conf /etc/selenoid/browsers.json к вашему выражению.

Другие вопросы по тегам