除非我打开交互式 bash 终端,否则 Docker 命令将无法工作

问题描述 投票:0回答:2

我正在使用 Docker 通过 nightwatch.js 运行自动化浏览器测试

当我打开交互式终端时,它工作正常,例如

docker run -it --rm username/image-name /bin/bash

这给了我一个 bash 提示符,然后我运行:

xvfb-run node nightwatch.js

一切正常。

但是当我跑步时:

docker run --rm username/image-name xvfb-run node nightwatch.js

它只是挂起。

打开bash终端手动运行测试命令和直接运行测试命令有什么区别?他们肯定都应该工作吗?

selenium docker nightwatch.js
2个回答
1
投票

好吧,我仍然不知道是什么导致了这个问题,但我有一个非常有效的解决方法:

将 bash 作为守护进程运行:

CONTAINERID=$(docker run -it -d username/image-name /bin/bash)

然后使用docker exec:

docker exec $CONTAINERID xvfb-run node nightwatch.js

当然事后你还需要做一些整理工作:

docker stop $CONTAINERID
docker rm $CONTAINERID

0
投票

我发现另一个可行的解决方法是将命令放入脚本中。例如:

$ echo "xvfb-run node nightwatch.js" >> tmp.sh
$ docker run -it --rm -v $(pwd):your-workdir username/image-name tmp.sh
... expected output...

假设容器可以访问您的脚本,例如如上例所示使用 -v。

© www.soinside.com 2019 - 2024. All rights reserved.