【发布时间】:2015-08-19 19:43:32
【问题描述】:
我有一个使用 ubuntu 基础镜像的 Dockerfile,并使用 apt-get 和 dpkg 安装了一堆依赖项。然后它复制一些 javascript 文件并运行一个节点应用程序。节点应用产生一个子进程并执行xvfb-run selenium-standalone start。
如果我使用 --no-cache 构建 docker 映像并使用 docker run -i -t <image id> 运行它,我的应用程序将立即启动并连接到 selenium 服务器。如果我使用 CTRL-C 或 docker stop <container id> 杀死容器,然后运行与上面完全相同的 docker run 命令,我的应用程序将正常启动,但无法连接到 selenium 服务器。如果我不理会它,五分钟后,它会自行正确连接。每次我运行 docker run 时,它都会以这种方式运行,直到我进行干净的映像构建。
更改节点源文件并主要从缓存中重建不会改变此行为。这个过程我已经重复了好几次了,都是一样的。
如果使用相同的图像,我无法弄清楚行为如何从一个docker run 更改为下一个。共享状态在哪里?
工作时记录:
一饮而尽
22:42:31.541 信息 - 启动独立的 Selenium 服务器
将系统属性 webdriver.chrome.driver 设置为 /usr/lib/node_modules/selenium-standalone/.selenium/chromedriver/2.16-x64-chromedriver
22:42:31.579 信息 - Java:甲骨文公司 24.79-b02
22:42:31.579 信息 - 操作系统:Linux 3.18.5-tinycore64 amd64
22:42:31.594 信息 - v2.46.0,带有核心 v2.46.0。从修订版 87c69e2 构建
22:42:31.676 信息 - 驱动程序提供程序 org.openqa.selenium.ie.InternetExplorerDriver 注册被跳过: 注册功能 Capabilities [{platform=WINDOWS, ensureCleanSession=true, browserName=internet explorer, version=}] 与当前平台 LINUX 不匹配
22:42:31.676 信息 - 找不到驱动程序类:com.opera.core.systems.OperaDriver
22:42:31.677 信息 - 驱动程序提供程序 com.opera.core.systems.OperaDriver 未注册
[22:42:31] 使用 gulpfile /opt/app/gulpfile.js
[22:42:31] 开始“运行”...
[22:42:31] 1.29 毫秒后完成“运行”
已启动应用程序。
22:42:31.764 信息 - RemoteWebDriver 实例应连接到:http://127.0.0.1:4444/wd/hub
22:42:31.764 信息 - Selenium 服务器已启动并正在运行
硒开始
2015-08-19T22:42:32.445Z 在端口启动应用程序:8000
除了缺少 RemoteWebDriver、“Selenium 服务器已启动并正在运行”和“Selenium 已启动”之外,不工作时的日志完全相同。行。
【问题讨论】:
-
两次运行之间是否有相同的服务器?会不会是罪魁祸首?
-
您可以使用
--read-only标志运行您的容器 -
服务器应该和容器一起死吧?使用 localhost 访问,应该是容器。
-
@Thomasleveil 应用程序写入文件系统,因此它不会以只读模式运行。
-
@cava23 你有日志吗?您是否尝试使用
docker logs获取标准输出/标准错误日志。状态也可能在您的 selenium 服务器中。
标签: node.js selenium selenium-webdriver docker xvfb