是否有任何原因导致 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/