reactjs - 如何在 docker 镜像中运行电子应用程序?
问题描述
每个人!
我想在 Win10 上的 docker 镜像中运行一个 react-electron 应用程序(这是一个离线应用程序)。我曾经通过运行npm start-win
然后在 Windows 上运行应用程序npm start-electron-win
。
这是我的 package.json 文件的一部分。
"scripts": {
"start": "export BROWSER=none && export PORT=3005 && react-scripts start",
"start-win": "set BROWSER=none && set PORT=3005 && react-scripts start",
"start-electron": "export ELECTRON_START_URL=http://localhost:3005 && electron .",
"start-electron-win": "set ELECTRON_START_URL=http://localhost:3005 && electron .",
},
这是 Dockerfile。
# base image
FROM node:12.2.0-alpine
# set working directory
WORKDIR /app
# add `/app/node_modules/.bin` to $PATH
ENV PATH /app/node_modules/.bin:$PATH
# install and cache app dependencies
COPY package.json /app/package.json
RUN npm install
RUN npm install react-scripts@3.0.1 -g
# start app
CMD ["npm", "start"]
CMD ["npm", "start-electron"]
使用以下命令构建并启动 docker 后,
- docker build -t offline:dev .
- docker run -v ${PWD}:/app -v /app/node_modules -p 3005 --rm offline:dev
构建成功,没有任何错误,我可以在 上浏览应用程序localhost:3005
,但我希望看到正在运行的电子桌面应用程序。
有没有人可以帮助我在 docker 上启动应用程序?
谢谢!
解决方案
您要查找的内容称为x11 forwarding。
不幸的是,与使用 linux 发行版相比,使用正在运行的 docker 容器显示底层 UI 会有点棘手 - docker 容器几乎都是基于 linux 的。您不能真正安装相关的unix 套接字
通常,您只需将以下行添加到图像中
RUN xhost local:root
并在安装插座的情况下运行
docker run -v /tmp/.X11-unix:/tmp/.X11-unix -e DISPLAY=$DISPLAY
光明的一面,
似乎有一个易于安装的解决方案
- VcXsrv
- 使用服务器 ip添加
$DISPLAY
env 变量
按照此处的说明进行操作
https://dev.to/darksmile92/run-gui-app-in-linux-docker-container-on-windows-host-4kde
推荐阅读
- c - 使用C中的文件描述符计算文件的行数
- java - 检查数组列表中是否有任何字符串
- react-native - 使用轮播实现的图像滑块不起作用
- javascript - API json 数据到 javascript 变量
- java - 爪哇。如何通过反射获取子类的所有实例(不是类)?
- clojure - 连接到 REPL 时出现 Clojure/Java 错误 - java.io.FileNotFoundException:找不到 'clojure/core/server__init.class
- css - CSS 类名括号表示法不针对内部 CSS 类
- android - 成功安装 APK 后“设备处于离线状态”
- bash - Ubuntu 18.04 - 添加新用户并初始化
- asp.net - 如何在 asp core mvc 项目中添加子应用程序?