xvfb-run在容器中挂起

9
我正在尝试将一个生成 .STL 文件快照的 Node 应用程序容器化。该应用程序通过 xvfb-run 启动,以提供模拟 GUI 以生成所需的快照。如果我只是直接运行应用程序而没有使用容器,它是可以工作的。但当我试图将其容器化时,xvfb-run 永远挂起。容器控制台中没有任何输出,没有日志,添加 -e /dev/stdoutxvfb-run 中也无法输出任何内容。

这是我的 Dockerfile:

FROM debian:latest AS build-env
WORKDIR /app
COPY src ./src
COPY tsconfig.json ./
COPY package.json ./
RUN apt-get update
RUN apt-get install -y curl
RUN apt-get install -my wget gnupg
RUN curl -sL https://deb.nodesource.com/setup_8.x | bash
RUN apt-get install -y nodejs build-essential libxi-dev xvfb libgl1-mesa-dev libglu1-mesa-dev libglew-dev
RUN npm install .
RUN npm install -g typescript
RUN tsc
EXPOSE 3000
CMD ["xvfb-run", "node", "dist/examples/server.js"]

示例运行(游标永远停留在那里,什么也没有打印)

示例运行

编辑:只想澄清的是它确实应该打印出东西 - 当Express服务器启动时,它会打印出一些内容,所以我可以知道它没有启动而且出了问题。我还可以确认xvfb-run命令存在,因为不带任何其他参数运行它会显示一个帮助信息。


五年后,在树莓派上作为Docker服务器遇到了同样的问题。我尝试在容器内运行一个Java GUI应用程序。它在树莓派本身上完美运行,但是在容器内,光标在应用程序启动后就停止了。你能解决这个问题吗?(对我来说,“init:true”没有帮助) - Mar Tin
1个回答

16

或许有些迟,但我刚看到你的帖子。你可能需要像tini这样的东西,所以当你运行docker run时,请使用 --init 标志。这将把初始化系统加载为ENTRYPOINT

Wine是一个很好的使用它的示例

而在docker-compose中使用它,只需在服务中添加init: true即可。

我还发现了类似的东西,也许对你有用:stl-thumb

希望能对你有所帮助!


4
自 Docker v1.13 起,当您使用 docker run --init 命令时,Docker 会集成 tini。 - Dan Dennedy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接