运行 命令似乎在 Docker 中不起作用
RUN command seems not to work in Docker
我的目的是 运行 在 Docker 中创建一个 GUI jar 文件,这样我就可以使用 xdotool 自动执行命令,并可以通过 x11vnc 查看它。
这是我的Docker文件:
# WEB 0.1
FROM ubuntu:14.04
RUN apt-get update \
&& apt-get install -y \
default-jre \
x11vnc \
xdotool \
xsel \
xvfb \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
RUN DISPLAY=:1.0 \
&& export DISPLAY \
&& mkdir /root/.vnc \
&& x11vnc -storepasswd 1234 /root/.vnc/passwd \
&& Xvfb :1 -screen 0 493x476x8 & \
x11vnc -display :1.0 -usepw -forever &
ENTRYPOINT ["java"]
CMD ["-jar", "/var/bin/program.jar"]
我运行它与:
docker run \
--name program-jar \
-p 5090:5900 \
-v /var/bin/program-jar/:/var/bin/ \
-d program-jar:0.1
但是在这个容器里面它没有定义 $DISPLAY 也不是 运行ning x11vnc 和 Xvfb
root@62febbc0b8f9:/# echo $DISPLAY
root@62febbc0b8f9:/# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 11.7 0.9 4226956 98588 ? Ssl 14:30 0:01 java -jar /var/bin/program.jar
root 26 0.2 0.0 18188 3268 ? Ss 14:30 0:00 /bin/bash
root 41 0.0 0.0 15580 2044 ? R+ 14:30 0:00 ps aux
root@62febbc0b8f9:/#
(如果我 运行 bash 中 运行 中的那些命令有效...不知道为什么 运行 在 [=28 时似乎不起作用=] docker build)
添加到您的 docker run
命令
-v $HOME/.Xauthority:/home/developer/.Xauthority -v /tmp/.X11-unix:/tmp/.X11-unix:ro
如果您需要一些导出,
环境
指令
专为此而设计,参见
docker 当您 RUN
它为安装创建一个单独的层时使用层文件系统它不用于 运行 程序但它用于下载源代码或从源代码等构建,例如 RUN mvn package
你应该这样做的方法是创建一个 shell 脚本,通常他们称之为 bootstrap.sh 你将它复制到你的容器中 COPY bootstrap.sh /app
或类似的东西,然后你可以把这个命令
#!/bin/bash
DISPLAY=:1.0 \
&& export DISPLAY \
&& mkdir /root/.vnc \
&& x11vnc -storepasswd 1234 /root/.vnc/passwd \
&& Xvfb :1 -screen 0 493x476x8 & \
x11vnc -display :1.0 -usepw -forever &
java -jar /var/bin/program.jar
到你的 shell 脚本中,你的 docker 文件中的最后一个命令将其更改为 CMD ./bootstrap.sh
类似的东西
我的目的是 运行 在 Docker 中创建一个 GUI jar 文件,这样我就可以使用 xdotool 自动执行命令,并可以通过 x11vnc 查看它。
这是我的Docker文件:
# WEB 0.1
FROM ubuntu:14.04
RUN apt-get update \
&& apt-get install -y \
default-jre \
x11vnc \
xdotool \
xsel \
xvfb \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
RUN DISPLAY=:1.0 \
&& export DISPLAY \
&& mkdir /root/.vnc \
&& x11vnc -storepasswd 1234 /root/.vnc/passwd \
&& Xvfb :1 -screen 0 493x476x8 & \
x11vnc -display :1.0 -usepw -forever &
ENTRYPOINT ["java"]
CMD ["-jar", "/var/bin/program.jar"]
我运行它与:
docker run \
--name program-jar \
-p 5090:5900 \
-v /var/bin/program-jar/:/var/bin/ \
-d program-jar:0.1
但是在这个容器里面它没有定义 $DISPLAY 也不是 运行ning x11vnc 和 Xvfb
root@62febbc0b8f9:/# echo $DISPLAY
root@62febbc0b8f9:/# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 11.7 0.9 4226956 98588 ? Ssl 14:30 0:01 java -jar /var/bin/program.jar
root 26 0.2 0.0 18188 3268 ? Ss 14:30 0:00 /bin/bash
root 41 0.0 0.0 15580 2044 ? R+ 14:30 0:00 ps aux
root@62febbc0b8f9:/#
(如果我 运行 bash 中 运行 中的那些命令有效...不知道为什么 运行 在 [=28 时似乎不起作用=] docker build)
添加到您的 docker run
命令
-v $HOME/.Xauthority:/home/developer/.Xauthority -v /tmp/.X11-unix:/tmp/.X11-unix:ro
如果您需要一些导出,
环境
指令
专为此而设计,参见
docker 当您 RUN
它为安装创建一个单独的层时使用层文件系统它不用于 运行 程序但它用于下载源代码或从源代码等构建,例如 RUN mvn package
你应该这样做的方法是创建一个 shell 脚本,通常他们称之为 bootstrap.sh 你将它复制到你的容器中 COPY bootstrap.sh /app
或类似的东西,然后你可以把这个命令
#!/bin/bash
DISPLAY=:1.0 \
&& export DISPLAY \
&& mkdir /root/.vnc \
&& x11vnc -storepasswd 1234 /root/.vnc/passwd \
&& Xvfb :1 -screen 0 493x476x8 & \
x11vnc -display :1.0 -usepw -forever &
java -jar /var/bin/program.jar
到你的 shell 脚本中,你的 docker 文件中的最后一个命令将其更改为 CMD ./bootstrap.sh
类似的东西