node.js - docker 容器未启动 - 产生 Java enoent 错误

标签 node.js docker docker-compose dockerfile serverless-framework

我有一个 dockerfile 和一个 docker-compose 文件,我用它来启动 Node 无服务器容器。

直到今天,当我尝试向 serverless.yaml 文件添加新端点时,它一直工作正常。

我停止了容器并再次启动它,但出现了 Java enoent 生成错误。

我尝试恢复对无服务器文件的更改,恢复对 Node 应用程序主 js 文件的更改以及所有其他更改,尝试重新创建容器,清理所有现有图像以及我能想到的任何内容,以尝试和启动容器,总是得到同样的错误:

Error: spawn java ENOENT
dock    |     at _errnoException (util.js:1022:11)
dock    |     at Process.ChildProcess._handle.onexit (internal/child_process.js:190:19)
dock    |     at onErrorNT (internal/child_process.js:372:16)
dock    |     at _combinedTickCallback (internal/process/next_tick.js:138:11)
dock    |     at process._tickDomainCallback (internal/process/next_tick.js:218:9)

这是我正在使用的 Dockerfile:

FROM node:8.10.0
RUN apt-get update && apt-get install -y default-jre && apt-get clean
RUN mkdir -p /usr/src/app
COPY . /usr/src/app/
WORKDIR /usr/src/app/
EXPOSE 3000
RUN npm install
RUN npm i -g serverless
RUN sls dynamodb install
RUN serverless config credentials --provider aws --key [...] --secret [...]

这是 docker-compose 文件:

version: '2'
services:
  app:
    container_name: dock
    build: .
    volumes:
      - .:/usr/src/app
      - /usr/src/app/node_modules
    ports:
      - 8000:8000
      - 3000:3000
    command: sls offline start

它们都位于项目目录中,我运行sudo docker-compose up来启动容器

我无法理解发生了什么,但一定有什么事情发生了变化。我该如何调试这个?

谢谢。

最佳答案

我找到了两个解决方案,所以我将它们留在这里。

关于启动容器的错误,我可以通过更改 docker-compose 文件来纠正该错误

command: sls offline

而不是

command: sls offline start

之后,当能够启动容器时,我意识到软件包有更新。恢复它们解决了问题(我没有注意到这些软件包更新,它们不是故意完成的,所以我猜 npm install 或类似的东西更新了软件包):

这些是有问题的软件包版本:

"serverless-dynamodb-local": "^0.2.33",
"serverless-offline": "^3.25.10",

这些是正确的和旧的:

"serverless-dynamodb-local": "^0.2.28",
"serverless-offline": "^3.20.1",

希望这可以帮助遇到同样问题的人!

关于node.js - docker 容器未启动 - 产生 Java enoent 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52265824/

相关文章:

javascript - 对象值未定义

javascript - 为什么 ng-click 被称为按钮被点击的次数?

node.js - URL : http://localhost:8100/api/timeline 的 500 内部服务器错误

jenkins - 如何在Dockerfile中获取主机上组的GID

node.js - Sequelize : 'findAll' in instance method getParticipants()?

docker - 在 Spring Cloud 中的 bootstrap.yml 上设置配置文件以针对不同的配置服务器

azure - 将伪 TTY 与 Azure 容器实例结合使用?

docker - Github 操作 Pylint 步骤无法使用测试作业创建目录

java - 容器之间的连接问题(我想......)

docker - 通过 docker-compose 文件版本 "3"安装主机目录并重新使用数据卷