泊坞窗,nodejs:节点未find错误
(在Ubuntu 16.04和Docker 1.13上)
当我运行我试图运行我的server.js的dockerfile时,出现错误:
sh:1:节点:找不到
我做了一些研究,名称节点和nodejs由于包冲突而被更改并导致错误; 但是,当我切换到nodejs-legacy是行不通的。 是什么导致了这个问题?
与nodejs错误
与nodejs-legacy错误
DockerFile
FROM ubuntu RUN apt-get update RUN apt-get install nodejs -y #RUN rm -f package-lock.json RUN apt-get install npm -y RUN apt-get install apt-utils -y WORKDIR /usr/scr/app COPY package.json package-lock.json /usr/src/app/ COPY . . EXPOSE 8080 CMD ["npm", "start"]
的package.json
{ "name": "iam", "version": "1.0.2", "description": "Identity and access management.", "main": "server.js", "scripts": {"start": "node server.js" }, "author": "", "license": "ISC", "dependencies": { "body-parser": "^1.17.2", "cors": "^2.8.3", "express": "^4.15.3", "jsonwebtoken": "^7.4.1", "ldapjs": "^1.0.1" } }
@cassini是正确的,但我不认为你已经提供了足够的信息来帮助我们find问题所在。 从Ubuntu存储库安装node.js
的方式显然有些问题。 实际上,我build议不要使用Ubuntu存储库来安装node.js
– 它通常服务于相当旧的软件包版本,而整个node
/ nodejs
软件包的命名问题相当混乱。 这些评论都不是为了打击Ubuntu:他们服务于旧的软件包,因为他们试图服务于稳定的软件包,并且命名问题是由于他们无法控制的问题而出现的。
在我看来,比使用Ubuntu存储库更好的解决scheme是使用Docker存储库中的官方node
映像之一。 如果你看看这个链接,你会看到他们有各种各样的版本和操作系统可用。 你可以重写你的Dockerfile,看起来像这样:
# the Debian wheezy image with node 8.5.0 installed FROM node:8.5.0-wheezy # looks like you have a typo here... changed /usr/scr/app to /usr/src/app WORKDIR /usr/src/app COPY package.json package-lock.json /usr/src/app/ COPY . . EXPOSE 8080 CMD ["npm", "start"]
顺便说一句,如果你想要一个小图像,那么阿尔卑斯山的Linux图像是很好的。 Ubuntu的图像大小将达到几百兆,而Alpine图像的大小则要小得多。 缺点是它不是基于Debian的,所以有一些怪癖,你将不得不习惯。
但是,如果你真的想用自己的基于Ubuntu的图像和node.js
我首先会直接从源代码安装node.js
这将涉及通过wget
/ curl
在Dockerfile中下载,解压,并确保它安装在正确的位置。
如果你真的想使用Ubuntu和版本库中的版本,那么你需要弄清楚你的图像出了什么问题。 这意味着潜入一个运行这个映像的容器并find节点二进制文件。
要获得对容器的shell访问权限:
docker run -it --rm <image name or hash> /bin/bash
一旦你在你的主机上运行这个命令,你将会看到一个新的bash shell提示符。 恭喜! 您现在可以通过shell来访问基于映像的临时容器。 现在你需要捅一下,看看你是否可以运行或find二进制文件。
试试node --version
或者nodejs --version
来看看你是否安装了它。 如果which nodejs
,请尝试使用which node
或which node
来查找二进制文件的path。
如果你能find这个二进制文件,你可以编辑你的Dockerfile来包含从你的二进制文件的path中的某个链接。 例如,假设which nodejs
给你/usr/bin/nodejs
,你可以在你的Dockerfile中使用@cassinibuild议的链接:
RUN ln -s /usr/bin/nodejs /usr/bin/node
您需要手动添加一个新的符号链接,它将指向nodejs。 示例(请检查nodejs路由, / usr / bin / nodejs是默认路由):
sudo ln -s /usr/bin/nodejs /usr/bin/node
- docker图像更新跨多个客户端
- 使用Docker容器监视Oracle数据库
- pipe理必须与TLS通信的Docker容器的证书/密钥的最佳方法是什么?
- 添加用angular色添加创buildmongodb和用户的语法问题
- 如何将正则expression式作为ulr中的查询parameter passing给Papartrail
- 在kubernetes中绑定应用程序窗格和数据库窗格
- 试图dockerize一个node.js文件,但不断收到错误
- 保持自托pipe的服务堆服务作为docker群服务而不使用控制台readline或readkey
- 在自定义的mesos调度程序启动的Docker容器中运行自定义执行程序