我不知道我的问题是否愚蠢,但经过几个小时的绞尽脑汁,我更愿意问你。
我试图在Docker容器 (windows)上运行NPM。我不想要一个真正的“节点服务器”;我只是使用NPM来运行诸如gulp、webpack、browserify、vue.js等实用工具。
因此,我在我的./docker-compose.yml
文件中添加了以下内容:
services:
node:
build: docker/node
environment:
- NODE_ENV=dev
在此之前,我脑子里的一切听起来都很好。下面是我的./docker/node/Dockerfile
的内容:
# See https://github.com/nodejs/docker-node#dockerfile
FROM node:6
EXPOSE 8080
USER node
# set the working directory
RUN mkdir /home/node/app
WORKDIR /home/node/app
# delete existing modules and re-install dependencies
COPY package.json /home/node/app/package.json
RUN rm -rf node_modules
RUN npm install
# launch the app
# EDIT : I removed this line to solve the issue. See answer.
CMD ["npm", "start"]
为了创建它,我只是遵循官方教程。然后,这里是我的./docker/node/package.json
文件:
{
"name": "custom-symfony-project",
"version": "1.0.0",
"dependencies": {
"gulp": "^4.0.0"
},
"devDependencies": {
"gulp": "^4.0.0"
}
}
我还有3个容器: PHP、MySQL和NGINX,但是它们都是独立的,并且它们的启动都是正确的,所以我不认为它们是问题的痛苦所在。
所以我运行了我的docker-compose build
:一切都很好。
但是当我运行docker-compose start
时,我在节点容器日志中找到了一些东西:
npm ERR! missing script: start
我试图添加一个空的server.js
,但是容器没有启动。
,所以我的问题是:我真的需要开始什么吗?我需要server.js吗?我不知道该怎么做。
当我在Ubuntu中使用npm时,我从来没有指定过一个开始脚本..!
谢谢!
发布于 2018-01-18 21:37:55
只要容器支持的进程正在运行和容器只能运行一个进程。,容器就可以运行。在您的示例中,您将移除CMD
行,它启动容器支持的进程,因此容器没有什么可做的,只是立即关闭。
您应该将您的Docker容器看作一个进程,而不是VM (虚拟机)。VM将加载Node和其他依赖项,并且随时准备在登录到它时运行命令,但是容器会旋转起来运行一个命令,然后关闭。
听起来你想让这个容器旋转,运行Gulp,然后关闭。如果是这样的话,您可以使用这样的CMD
行(假设您在Dockerfile
中全局安装gulp ):
CMD ['gulp']
或者您想让它旋转起来,并使用gulp-watch
监视更改?在这种情况下,CMD
应该是这样的:
CMD ['gulp', 'watch']
如果使用这两个选项,请注意,除非使用绑定安装,否则Gulp将在容器中构建文件,而不是在主机文件系统上构建文件。绑定挂载将允许主机文件系统与容器共享目录,并方便对文件进行单向或双向更新。
https://stackoverflow.com/questions/48307048
复制相似问题