docker 容器未启动 - spawn Java enoent 错误
docker container does not start - spawn Java enoent error
我有一个 docker 文件和一个 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
启动容器
我不明白发生了什么,但一定有什么改变了。我该如何调试?
谢谢。
我找到了两个解决方案,所以我就把它们留在这里。
关于启动容器的错误,我可以通过更改 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",
希望这对面临同样问题的人有所帮助!
我有一个 docker 文件和一个 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
启动容器
我不明白发生了什么,但一定有什么改变了。我该如何调试?
谢谢。
我找到了两个解决方案,所以我就把它们留在这里。
关于启动容器的错误,我可以通过更改 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",
希望这对面临同样问题的人有所帮助!