docker容器无法启动 - 产生Java enoent错误

问题描述 投票:0回答:1

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

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

我停止了容器再次启动它,我得到了一个Java enoent spawn错误。

我尝试将更改恢复到无服务器文件,将更改还原到节点应用程序的主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来启动容器

我无法理解发生了什么,但必须改变一些事情。我该怎么调试呢?

谢谢。

node.js docker docker-compose dockerfile serverless-framework
1个回答
1
投票

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

关于启动容器的错误,我能够通过更改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",

希望这可以帮助面临同样问题的人!

© www.soinside.com 2019 - 2024. All rights reserved.