Docker.js的噩梦

Docker.js的噩梦,docker,dockerfile,nightmare,Docker,Dockerfile,Nightmare,我正在尝试在服务器上运行噩梦.js。我很清楚它在Linux上是无头的,需要xvfb。我不明白的是,为什么在调试模式下会继续出现以下错误: nightmare queuing process start +0ms nightmare queueing action "useragent" +3ms nightmare queueing action "goto" for https://news.ycombinator.com +2ms nightmare queueing act

我正在尝试在服务器上运行噩梦.js。我很清楚它在Linux上是无头的,需要
xvfb
。我不明白的是,为什么在调试模式下会继续出现以下错误:

  nightmare queuing process start +0ms
  nightmare queueing action "useragent" +3ms
  nightmare queueing action "goto" for https://news.ycombinator.com +2ms
  nightmare queueing action "cookies" +1ms
  nightmare queueing action "goto" for https://news.ycombinator.com/login +0ms
  nightmare queueing action "type" +1ms
  nightmare queueing action "type" +0ms
  nightmare queueing action "click" +0ms
  nightmare queueing action "wait" +1ms
  nightmare queueing action "goto" for https://news.ycombinator.com/item?id=11878025 +0ms
  nightmare queueing action "click" +0ms
  nightmare queueing action "wait" +1ms
  nightmare running +0ms
  nightmare electron child process exited with code 2: undefined +25ms
这是我的Dockerfile:

FROM node:latest

RUN apt-get update &&\
    apt-get install -y \
    xvfb \
    x11-xkb-utils \
    xfonts-100dpi \
    xfonts-75dpi \
    xfonts-scalable \
    xfonts-cyrillic \
    x11-apps \
    clang \
    libdbus-1-dev \
    libgtk2.0-dev \
    libnotify-dev \
    libgnome-keyring-dev \
    libgconf2-dev \
    libasound2-dev \
    libcap-dev \
    libcups2-dev \
    libxtst-dev \
    libxss1 \
    libnss3-dev \
    gcc-multilib \
    g++-multilib

RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app

COPY . /usr/src/app

RUN npm install

CMD DEBUG=nightmare* xvfb-run --server-args="-screen 0 1024x768x24" node tux.js -s hn -m create -p 11878025

有什么想法吗?非常感谢您的帮助。

读取未定义的
的错误表明您缺少一个包。毕竟,如果没有安装软件包,那么如何定义它呢?这意味着您没有正确构建容器,我想我看到了罪魁祸首

RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app

*COPY . /usr/src/app*

RUN npm install

根据,COPY命令复制文件,而不是使用
COPY指定的目录/usr/src/app
。相反,尝试将
替换为
*
,因为这将指定当前目录中您决定从中启动
docker build
的所有文件。

好的,因此我找到了问题所在。显然,它不喜欢Dockerfile中的复制语法。我最终使用了ADD,它成功了

ADD /lib /usr/src/app/lib
ADD env.sh /usr/src/app
ADD package.json /usr/src/app
ADD tux.js /usr/src/app

您可以做的是将所有文件放在一个子目录中,例如app/和Dockerfile中,请执行以下操作:

ADD app/ /usr/src/app/
当然,在你的应用文件夹中会有env.sh、package.json、tux.js和lib目录

这样,如果您需要添加更多文件,就不必在dockerfile中手动添加它们


PS:它也适用于复制

你使用的是什么版本的噩梦?你能用DEBUG=mondam:*,electron:*运行它吗?看看你是否能得到一些有用的日志消息?运行最新版本的mondam.js(2.5.1),我在上面的帖子中得到以下输出。你能用
DEBUG=*
运行你的源代码并发布结果吗?在以后的Electron版本中,我认为它试图提供帮助,并告诉您缺少什么。(我用一个简单的例子尝试了你的Dockerfile,但无法复制。)运气不好。运行COPY*/usr/src/app将每个文件(不是目录)复制到my/user/src/app目录。关闭(我想),但没有运气。你能让你的应用程序工作而不使用容器吗?那么,就在你本地的机器上构建它,你成功了吗?尝试将不完整的应用程序放入docker容器不是一个好主意,因为这可能会增加一层全新的混乱。我怀疑你的应用程序是不完整的,但知道它并没有什么坏处。在本地工作很好。没有问题。它正在正确地设置和运行headless环境——我猜我缺少某种依赖性。。。。只是不确定输出的确切内容不够详细。您可以仅使用一条添加指令来限制创建的层数:
ADD env.sh package.json tux.js/usr/src/app