reactjs - 如何在 docker 镜像中运行 Electron 应用程序?

标签 reactjs docker electron

每个人!

我想在 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 上浏览应用程序,
但我期望看到正在运行的 Electron 桌面应用程序。

有没有人可以帮助我在 docker 上启动应用程序?

谢谢!

最佳答案

您要查找的内容称为 x11 转发。

不幸的是,与使用 linux 发行版相比,使用正在运行的 docker 容器显示底层 UI 会有点棘手 - docker 容器几乎都是基于 linux 的。您不能真正安装相关的 unix 套接字

通常,您只需将以下行添加到图像中

RUN xhost local:root

并在安装 socket 的情况下运行
docker run -v /tmp/.X11-unix:/tmp/.X11-unix -e DISPLAY=$DISPLAY

在光明的一面,

似乎有一个易于安装的解决方案
  • VcXsrv
  • 添加 $DISPLAY带有服务器 ip
  • 的 env 变量

    按照此处的说明

    https://dev.to/darksmile92/run-gui-app-in-linux-docker-container-on-windows-host-4kde

    关于reactjs - 如何在 docker 镜像中运行 Electron 应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60164544/

    相关文章:

    electron - 忽略 Electron 8 中的拼写 API

    javascript - 在 react native ListView 中搜索大数据

    linux - 为什么可以在 MacOS 上的 docker 上运行 Linux 容器

    reactjs - 如何在 Reactjs 上向同一个 useState 添加多个功能?

    docker - 如何使用多个 docker-compose.yml 文件配置 nginx?

    mysql - 应用程序和 MySQL Docker 容器通过 docker-compose 连接在一起。如何从我的应用程序使用 JDBC url 连接到 MySQL 容器数据库?

    javascript - mergeLatest() 未按预期工作

    javascript - npm run build 给出 npm ERR!代码生命周期

    javascript - 为什么 Axios .then 和 .catch 函数会增加我的索引?

    reactjs - React-redux 创建数组时重新渲染