在Docker compose中运行gulp-无法创建文件

时间:2018-07-02 12:09:44

标签: node.js docker docker-compose

我有个问题,而gulp没有制作任何文件。它说完成了,但是没有文件被创建。 如果我使用以下命令登录到我的docker实例:

  

docker exec -t -i myservice-service / bin / bash   如果我运行gulp命令,它将正确创建它

然后创建gulpfile.js中定义的所有文件。换句话说,public / dist /填充有main.js和其他CSS文件。

这是我的Dockerfile。

FROM node:9

RUN mkdir -p /usr/src/app
RUN mkdir -p /usr/src/logs

WORKDIR /usr/src/app

# GULP Installation
RUN npm install -g gulp
RUN npm install gulp

COPY package*.json /usr/src/app/
COPY .npmrc /usr/src/app/

RUN cd /usr/src/app/ && npm install && npm install -g nodemon

COPY . /usr/src/app
RUN chown -R node:node /usr/src/app && chown -R node:node /usr/src/logs

USER node

EXPOSE 3000
RUN gulp

CMD ["npm", "run-script", "start" ]

这是我的作曲家文件(开发中):

version: "3"

services:
  myservice-service:
    build: .
    image: myservice-service
    container_name: myservice-service
    volumes:
        - .:/usr/src/app
        - /usr/src/app/node_modules
    environment:
      - NODE_ENV=dev
    ports:
      - 3000:3000
    command: nodemon --delay 2 ./bin/www

我将其运行为:

  

docker-compose -f docker-compose.development.yml up --build

当我像这样运行它时,它不会创建任何文件。当我手动运行命令时,在屏幕上会得到相同的输出。

我花了数小时试图使其正常运行,我尝试设置权限以及不进行设置,但这只是不起作用。

我的期望是要在public / dist /中填充文件。

感谢您的帮助。

更新。它有效,但我对此表示怀疑:

我设法通过使用composerfile本身内部的命令使其工作。 所以就我而言:

  

命令:bash -c“ gulp && nodemon --delay 2 ./bin/www”

在我的推理中,gulp应该在Dockerfile本身内完成,而不是在作曲家文件内完成。但是话又说回来,这超出了我的知识范围。

1 个答案:

答案 0 :(得分:3)

Dockerfile在构建时运行,并将本地目录中的所有文件复制到容器中,然后运行gulp并创建任何文件。

然后,将本地文件夹安装在docker容器文件系统上,几乎用原始文件覆盖了docker文件中的操作,因为gulp在容器中的文件上运行,它不会影响原始文件,因此您正在撤消更改。

解决方案可以按照您在问题中提到的那样进行(将其添加到command中的docker-compose.yml或通过docker-compose exec运行)或编写一个自定义入口点脚本将运行gulp,然后运行命令,例如:

bin / entrypoint.sh

#!/bin/sh
gulp
exec "$@"

Dockerfile

FROM node:9

COPY bin/entrypoint.sh /entrypoint.sh
RUN chmod 755 /entrypoint.sh

RUN mkdir -p /usr/src/app
RUN mkdir -p /usr/src/logs

WORKDIR /usr/src/app

# GULP Installation
RUN npm install -g gulp
RUN npm install gulp

COPY package*.json /usr/src/app/
COPY .npmrc /usr/src/app/

RUN cd /usr/src/app/ && npm install && npm install -g nodemon

COPY . /usr/src/app
RUN chown -R node:node /usr/src/app && chown -R node:node /usr/src/logs

USER node

EXPOSE 3000

ENTRYPOINT ["/entrypoint.sh"]

CMD ["npm", "run-script", "start" ]

尽管您在开发和生产中使用相同的Dockerfile,但是每次容器启动时(例如,每次部署之后)都会运行gulp,因此这会使您的构建难以预测。