Does a Node Docker container has to be started for Gulp us?
我不知道我的问题是否愚蠢,但经过几个小时的思考,我更愿意问你。
我正在一个码头集装箱(windows)上运行NPM。我不想要一个真正的"节点服务器";我只是使用NPM来运行诸如gulp、webpack、browserify、vue.js等实用程序…
所以我在我的
1 2 3 4 5 | services: node: build: docker/node environment: - NODE_ENV=dev |
在这里之前,我脑子里的一切都很好。下面是我的
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | # 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"] |
为了创建它,我只是遵循官方的教程。然后,这是我的
1 2 3 4 5 6 7 8 9 10 | { "name":"custom-symfony-project", "version":"1.0.0", "dependencies": { "gulp":"^4.0.0" }, "devDependencies": { "gulp":"^4.0.0" } } |
我也有3个容器:PHP、MySQL和nginx,但它们都是独立的,并且都是正确启动的,所以我不认为它们是问题的症结所在。
所以我运行我的
但是当我运行
1 | npm ERR! missing script: start |
我试图添加一个空的
所以我的问题是:我真的需要开始做什么吗?我需要server.js吗?我不知道该放什么进去。
当我在Ubuntu中使用NPM时,我从来没有指定过一个开始脚本。
谢谢!
容器被设计为只要其支持的进程正在运行就可以运行,并且容器应该只运行一个进程。在您的情况下,您正在删除
您应该将Docker容器看作一个进程,而不是虚拟机。一个虚拟机将加载节点和其他依赖项,并且它可以随时在您登录到它时运行命令,但是一个容器旋转起来运行一个命令,然后关闭。
听起来你想让这个容器旋转起来,喝水,然后关机。如果是这种情况,您可以使用这样的
1 | CMD ['gulp'] |
或者你想让它旋转起来,用
1 | CMD ['gulp', 'watch'] |
如果您选择其中一个选项,请注意,除非使用绑定挂载,否则Gulp将在容器内而不是主机文件系统上构建文件。绑定挂载将允许主机文件系统与容器共享一个目录,并方便对文件进行单向或双向更新。
好的,所以我把
因此,我在
1 2 3 4 5 6 | node: build: docker/node environment: - NODE_ENV=dev container_name: symfony4-windock-node tty: true |