如何在Docker上运行Electron应用程序

20

我创建了一个分支,托管着一个基于Electron应用程序的聊天客户端: https://github.com/Serkan-devel/BetterDiscordApp-docker

我的目标是创建一个具有GUI界面的docker容器,类似于https://blog.jessfraz.com/post/docker-containers-on-the-desktop/ 中描述的方式。

我创建的dockerfile如下:

FROM node:slim

COPY . /usr/scr/app

#RUN rm bdstart.sh

RUN npm install --save-dev electron

RUN npm install

#ENV FRESHINSTALL=true

CMD ["/usr/scr/app/start.sh"]

start.sh文件如下:

./node_modules/.bin/electron ./src

构建Docker镜像并使用以下命令执行:

docker run -it -v /tmp/.X11-unix:/tmp/.X11-unix -e DISPLAY=unix$DISPLAY --device /dev/snd dixord

我遇到了错误代码:

standard_init_linux.go:175: exec user process caused "exec format error"

尽管我已经将文件设置为可执行并使用了正确的amd64体系结构,但还是无法运行。

有人想出了如何在docker中本地化地运行electron GUI吗?


这是你的 start.sh 文件,还是你只是复制并粘贴了有问题的那一行代码?因为也许你忘记添加 #!/bin/sh 这个在 shell 脚本中的第一行。 - VladoDemcak
然后我得到了/node_modules/electron/dist/electron: error while loading shared libraries: libgtk-x11-2.0.so.0: cannot open shared object file: No such file or directory的错误信息。 - Patently Paul
你在哪个操作系统上构建这个镜像? - VladoDemcak
这是 lubuntu 16.04。 - Patently Paul
我添加了详细的答案,说明了我如何复制您的问题,希望能对您有所帮助。 - VladoDemcak
显示剩余2条评论
2个回答

8

我会尝试在这个回答中帮助你 - 评论太长了。

我在我的Win10上尝试了你的Docker文件,遇到了同样的问题。 但是,通过添加必需的软件包,我解决了问题,并成功创建了docker镜像。 以下是Dockerfile:

FROM node:slim

COPY . /usr/scr/app

#RUN rm bdstart.sh
RUN apt-get update

# I think you need to install following 
RUN apt-get -y install libgtkextra-dev libgconf2-dev libnss3 libasound2 libxtst-dev libxss1
RUN npm install --save-dev electron

RUN npm install

CMD ["/usr/scr/app/start.sh"]

这是你的 start.sh 文件。

#!/bin/sh
./node_modules/.bin/electron ./src

实际上我没有访问您的文件和其他内容,但是使用这个DockerFile成功创建了Docker镜像。我还进入Docker容器并检查是否可以运行Electron——可以

如果您想进入容器,只需要构建Docker镜像。我是通过以下命令(最简单的方式)完成的:(在Dockerfile所在位置打开控制台并运行):

docker build -t test-image .

成功构建镜像后,您可以运行容器。如果遇到任何问题,我建议您使用bash入口点运行容器,并调试失败的内容 - bash将在您输入以下脚本的同一控制台中打开)

docker run -it test-image bash

1
我已经实现了你的更改,重新构建镜像并运行它,就像之前运行它一样。然后我遇到了错误没有指定协议。当使用bash(如你所说)执行start.sh文件时,我遇到了./start.sh:4: ./start.sh: ./node_modules/.bin/electron: 未找到的错误。但是当你成功运行它时,是否弹出了一个窗口? - Patently Paul

3

我读了你的文章(很酷!),我看到你正在使用自己的docker镜像叫做“calbertts/node-gtk”,我想知道你在这个gtk镜像中使用了哪个node docker镜像作为基础?我正在尝试看看是否可以在不使用Nut的情况下获得相同的结果。我可以使用你的docker镜像,但我想知道它包含了什么。 - Alejandro Figueroa
我刚刚更新了hub仓库(https://hub.docker.com/r/calbertts/node-gtk),你可以去查看一下。 - calbertts

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