我有一些我为此构建的Docker镜像;一个用于扫描程序,另一个用于浏览器等。一旦我让它们工作,我创建了执行bash运行脚本的.desktop文件I&创建了#39;用于运行容器。
我的问题是:有没有办法在没有终端GUI显示的情况下运行.desktop文件?我尝试了几种方法但没有成功。
例如,我尝试过:
[Desktop Entry]
Name=gscan2pdf
Icon=gscan2pdf.png
Exec=gnome-terminal -e
"/home/hildy/Documents/repos/docker/gscan2pdf/run_gscan.sh"
Type=Application
Terminal=false
以及:
[Desktop Entry]
Name=gscan2pdf
Icon=gscan2pdf.png
Exec="/home/hildy/Documents/repos/docker/gscan2pdf/run_gscan.sh"
Type=Application
Terminal=true
当然这两个脚本都很好地执行脚本,如果在没有首先启动终端GUI的情况下启动应用程序,我会更好。 主机系统: CentOS 7 - Gnome 3桌面
运行脚本的一个示例:
#!/bin/bash
HOST_UID=$(id -u)
HOST_GID=$(id -g)
XSOCK=/tmp/.X11-unix &&
XAUTH=/tmp/.docker.xauth &&
touch $XAUTH &&
xauth nlist :0 | sed -e 's/^..../ffff/' | xauth -f $XAUTH nmerge - &&
#These are only run the first time a container is run from the image
#docker run -e NEW_USER="${USER}" -e NEW_UID="${HOST_UID}" -e
#NEW_GID="${HOST_GID}" hildy/gscan2pdf:v1
#LAST_CONTAINER=$(docker ps -lq) &&
#docker commit "${LAST_CONTAINER}" hildy/gscan2pdf:v1
docker run \
-ti \
--user $USER \
--privileged \
-v /dev/bus/usb:/dev/bus/usb \
-v $XAUTH:$XAUTH -v $XSOCK:$XSOCK -v /home/$USER:/home/$USER \
-e XAUTHORITY=$XAUTH -e DISPLAY \
--entrypoint "" hildy/gscan2pdf:v1 gscan2pdf &>/dev/null
答案 0 :(得分:1)
我找到了问题的答案。问题是运行容器的命令包含交互式终端的-i
选项。 @sneep在问题的评论中是正确的,当时他说“它应该与终端=假。”。他在脚本中添加一行来创建日志文件的技术也是一种很好的技术,我将来肯定会使用它,这有助于我诊断问题。
我还可以确认,正如@Oleg Skylar所建议的那样,将-it
替换为-d
用于分离模式。
修改了运行脚本的Docker命令:
docker run \
-t \
--user $USER \
--privileged \
-v /dev/bus/usb:/dev/bus/usb \
-v $XAUTH:$XAUTH -v $XSOCK:$XSOCK -v /home/$USER:/home/$USER \
-e XAUTHORITY=$XAUTH -e DISPLAY \
--entrypoint "" hildy/gscan2pdf:v1 gscan2pdf &>/dev/null
修改后的.desktop文件:
[Desktop Entry]
Name=gscan2pdf
Icon=gscan2pdf.png
Exec=/home/hildy/Documents/repos/docker/gscan2pdf/run_gscan.sh
Type=Application
Terminal=false
StartupNotify=true