是否必须为Gulp us启动Node Docker容器?

时间:2018-01-17 17:45:26

标签: node.js docker npm docker-compose

我不知道我的问题是不是愚蠢,但是,经过数小时的努力,我更愿意问你。

我试图在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时,我从未指定过启动脚本..!

谢谢!

2 个答案:

答案 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