我不知道我的问题是不是愚蠢,但是,经过数小时的努力,我更愿意问你。
我试图在Docker容器上运行NPM (windows)。 我不想要一个真正的节点服务器" ;我只是使用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
时,我在Node容器日志中得到了一些东西:
npm ERR! missing script: start
我尝试添加一个空的server.js
,但容器没有启动。
所以我的问题是:我真的需要开始吗?我需要server.js吗?我不知道该怎么做。
当我在Ubuntu中使用npm时,我从未指定过启动脚本..!
谢谢!
答案 0 :(得分:1)
容器只有在它们支持的进程正在运行且container should run only one process时才会运行。在您的情况下,您正在删除CMD
行,该行正在启动容器支持的过程,因此容器无关,只需立即关闭。
您应该将Docker容器视为一个进程,而不是VM(虚拟机)。 VM会加载Node和其他依赖项,并且可以在您登录时随时运行命令,但容器会旋转运行一个命令然后关闭。
听起来你想要这个容器旋转,运行Gulp,然后关闭。如果是这种情况,您可以使用CMD
这样的行(假设您在Dockerfile
内全局安装gulp):
CMD ['gulp']
或者您可能希望它使用gulp-watch
启动并观察更改?在这种情况下,CMD
应该是这样的:
CMD ['gulp', 'watch']
如果您使用任一选项,请注意Gulp将在容器中构建文件,而不是在主机文件系统上构建文件,除非您使用bind mount。绑定挂载将允许您的主机文件系统与容器共享一个目录,并促进对文件的单向或双向更新。
答案 1 :(得分:0)
好的,我将.loc[2015:2017]
行删除到Dockerfile中,但容器自然停止了。
所以我将cvv.loc[2015:2017]['quantity'].sum()
# \____ _______/\_____ ____/ \_ _/
# v v v
# filter select column aggregate
选项添加到CMD
文件中,以便即使当前没有任何内容正在运行,也能保持容器处于活动状态,并且目前它似乎有效:
tty: true