docker - 作为 docker 自定义命令执行 xvfb-run

标签 docker xvfb

是否有任何原因导致 xvfb-run 不会作为 docker 覆盖命令执行?

从此 Dockerfile 获取图像:

FROM ubuntu:20.04

RUN apt-get update && apt-get install -y xvfb

构建:

docker build -f Dockerfile.xvfb -t xvfb-test 

如果我使用 xfvb-run 执行自定义 docker 命令:

docker run xvfb-test bash -x /usr/bin/xvfb-run echo

它会卡住并且永远不会结束

但是,如果我输入图像docker run --rm -it xvfb-test bash,并执行相同的命令xvfb-run echo,它会立即完成(意味着 Xvfb 服务器已启动并能够执行命令)

这是 xvfb-run 脚本的摘录:

...
trap : USR1
(trap '' USR1; exec Xvfb ":$SERVERNUM" $XVFBARGS $LISTENTCP -auth $AUTHFILE >>"$ERRORFILE" 2>&1) &
XVFBPID=$!

wait || :
...

使用bash -x执行,我们可以看到最后执行的是哪些行:

+ XAUTHORITY=/tmp/xvfb-run.YwmHlq/Xauthority
+ xauth source -
+ trap : USR1
+ XVFBPID=16
+ wait
+ trap '' USR1
+ exec Xvfb :99 -screen 0 1280x1024x24 -nolisten tcp -auth /tmp/xvfb-run.YwmHlq/Xauthority

最佳答案

从此link

The docker --init option in the run command basically sets ENTRYPOINT to tini and passes the CMD to it or whatever you specify on the commandline. Without init, CMD becomes pid 1. In this case, /bin/bash

看起来运行没有 init 参数的命令,以 PID 1 运行,无法正确处理信号 USR1。

关于docker - 作为 docker 自定义命令执行 xvfb-run,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71699108/

相关文章:

docker - 如何解决 docker-compose 中的 "driver failed programming external connectivity"?

docker - 使用docker容器在Atlassian Bitbucket管道中进行测试

ruby-on-rails - 将 Rails 6 应用程序部署到 Google Cloud Platform App Engine 时出错

linux - 带有 Slimerjs 的 CasperJS - Xlib : extension "RANDR" missing on display ":99"

selenium-webdriver - 未知错误 : an X display is required for keycode conversions

docker - 如何在Docker Stack部署上禁用网络生成

angularjs - 使用SASS的无效US-ASCII字符

linux - Xvfb (xvfb-run) 不正确的分辨率

azure - 在 Azure 管道中,如何设置 X 显示以进行 headless (headless) Chrome 测试?

docker - 在 Docker 容器中使用 VNCserver + GUI 应用程序 + 虚拟显示