【问题标题】:Running gulp in Docker compose - does not create files在 Docker compose 中运行 gulp - 不创建文件
【发布时间】:2018-07-02 12:09:44
【问题描述】:

我遇到了 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 本身内完成,而不是在 composer 文件上完成。但话说回来,这超出了我的知识范围。

【问题讨论】:

  • npm start 命令中有什么内容?
  • 如下:"start": "node ./bin/www",
  • 你的 npm 安装中是否包含 gulp? - 例如签入 package.json
  • 是的。它作为常规 npm install 包含在我的 package.json 中

标签: node.js docker docker-compose


【解决方案1】:

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

然后将本地文件夹挂载到 docker 容器文件系统上,几乎用原始文件覆盖 docker 文件中所做的事情,因为 gulp 在容器中的文件上运行,它不会影响原始文件,所以你正在撤消更改。

解决方案要么按照您在问题中提到的那样进行(将其添加到 docker-compose.yml 中的 command 或通过 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。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-21
    • 1970-01-01
    相关资源
    最近更新 更多