2016-08-22 28 views
9

XDummyドライバを使用してドッキング・コンテナ内でX11サーバーを実行しようとしています。しかし、私はそれを動作させるのに問題があります。目的は、ヘッドレスレンダリングを実行することです。私はXvfbを使って動作させることができますが、RANDRのサポートが必要で、最終的にGLサポートも必要になります。Dockerコンテナ内のXDummy

Dockerfile:

FROM node:slim 

RUN mkdir nodeapp \ 
    && apt-get update \ 
    && apt-get install -y xorg \ 
    && apt-get install -y xserver-xorg-video-dummy x11-apps 

COPY App /nodeapp/ 

ENV DISPLAY :1 

RUN cd nodeapp/ \ 
    && npm install \ 
    && Xorg -noreset +extension GLX +extension RANDR +extension RENDER -logfile /nodeapp/xdummy.log -config /nodeapp/xorg.conf start :1 & 

ENTRYPOINT [ "node", "/nodeapp/index.js" ] 

xorg.confファイルは、基本的なXdummy xorg.confある

しかし、Xサーバが起動しない、とログファイルが役に立つものを提供していませんが、私は私は確信していますDockerfileにXorgを設定するときに何か間違っているが、何か類似のことをする例は見つからない。

これを行うにはどのような手順をお勧めしますか?

答えて

4

他の誰かが解決策を探している場合は、これを解決するための管理を行います。

FROM node:slim 

ENV DEBIAN_FRONTEND noninteractive 
ENV DISPLAY :1 

RUN mkdir nodeapp \ 
    && apt-get update \ 
    && apt-get -y install xserver-xorg-video-dummy x11-apps 

COPY App /nodeapp/ 

RUN cd nodeapp/ \ 
    && npm install 

ENTRYPOINT [ "node", "/nodeapp/index.js" ] 

問題は、apt-getのは、インストール中にドッカ容器内のキーボードの設定を求め、及びダミーパッケージは、すべての依存関係を提供するため、定期的なXorgのインストールが必要ないということだったということでした。

最後の問題は、Xorgとnodeappを同時に起動できないことでしたが、それは簡単な修正でした。私はすでにノードを使ってサービスを管理しているので、Xorgを起動する部分をその中に移しました。

var args = ["-noreset", "+extension", "GLX", "+extension", "RANDR", "+extension", "RENDER", "-logfile", "./xdummy.log", "-config", "/mplex-core/xorg.conf", ":1"]; 
this.proc = child_process.spawn("Xorg", args); 
4

私は「コンテナ当たり1つのもの」というDockerの哲学を購読していますので、ソリューションをXDummyだけに変更しました。他のコンテナに簡単にリンクすることができます。

 
FROM debian:jessie 

ENV DEBIAN_FRONTEND noninteractive 
ENV DISPLAY :1 

RUN apt-get update \ 
    && apt-get -y install xserver-xorg-video-dummy x11-apps 

VOLUME /tmp/.X11-unix 

COPY xorg.conf /etc/X11/xorg.conf 

CMD ["/usr/bin/Xorg", "-noreset", "+extension", "GLX", "+extension", "RANDR", "+extension", "RENDER", "-logfile", "./xdummy.log", "-config", "/etc/X11/xorg.conf", ":1"] 

そして、アクセスには、/tmp/.X11-unixボリュームをリンクし、ご使用の環境でDISPLAY=:1を設定します。

+1

あなたのソリューションはかなりきれいです。私は、あなたが "/tmp/.X11-unixボリュームをリンクする"という意味を理解するために、問題に問題がありました。ここに興味がある人は、私がやったことです: '' docker volume create --name x11tmp''と '' -v x11tmp:/ tmp/.X11-unix''をコンテナを作るためのコマンドを実行するために加えてください。 –

+0

裸のドッカー、ドッカーの作成、またはkubernetesを使用しているかどうかにかかわらず、リンクが異なって行われているため、一見あいまいです。 :)しかし、あなたの提案は、おそらく最も一般的なメカニズムのための最良の方法です、ありがとう! –

関連する問題