向image.run()部分

时间:2018-02-15 16:04:29

标签: docker jenkins docker-compose jenkins-docker selenoid

环境:

  • docker-plugin version:1.1.2;
  • jenkins版本:2.0.50727;
  • docker client / server version:17.12.0-ce;
  • Win 10 Pro x64;

场景1: 我尝试使用以下命令通过Jenkinsfile运行Selenoid映像:

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/"')
}

实际结果: 创建了容器,我在docker ps输出中看到了Selenoid容器。

情景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 个答案:

答案 0 :(得分:0)

看看Selenoid Dockerfile。重要的是:

ENTRYPOINT ["/usr/bin/selenoid"]

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

这意味着始终正在运行entrypoint命令,CMD内的所有内容仅在没有明确传递args的情况下适用。在您的情况下,您正在添加自己的参数:

'-video-output-dir /output'

这意味着CMD部分内容不再适用。但-conf是必填参数,默认为config/browsers.json,而不是/etc/selenoid/browsers.json。所以正确的解决方案是在表达式中添加-conf /etc/selenoid/browsers.json