我使用 Docker 的 Gulp Watch 任务有什么问题?

What is wrong with my Gulp Watch task with Docker?

编辑:Gulp "Watch" 在 windows 上不起作用,我的代码中有 mounted volumes because no "file change" event is sent. My current solution is to run Docker Windows Volume Watcher on my local machine while I see if I can integrate

我正在尝试 运行 我的 docker 文件中的 gulp 监视任务,但当我的文件发生更改时 gulp 没有捕捉到。

快速笔记:

我很清楚 gulp 观察变化的方式与 Docker 让这种情况发生的方式之间存在某种脱节。

Github link

**编辑:看起来可以做我想做的事,here's a link to someone doing it slightly differently.

gulpfile excerpt:

export const watchForChanges = () => {

  watch('scss-js/scss/**/*.scss', gulp.series('styles'));
  watch('scss-js/js/**/*.js', scripts);
  watch('scss-js/scss/*.scss', gulp.series('styles'));
  watch('scss-js/js/*.js', scripts);
  // Try absolute path to see if it works
  watch('scss-js/scss/bundle.scss', gulp.series('styles'));
}
...
// Compile SCSS through styles command
export const styles = () => {
    // Want more than one SCSS file? Just turn the below string into an array
  return src('scss-js/scss/bundle.scss')
      // If we're in dev, init sourcemaps. Any plugins below need to be compatible with sourcemaps.
    .pipe(gulpif(!PRODUCTION, sourcemaps.init()))
      // Throw errors
    .pipe(sass().on('error', sass.logError))
      // In production use auto-prefixer, fix general grid and flex issues.
    .pipe(
      gulpif(
        PRODUCTION,
        postcss([
          autoprefixer({
            grid: true
          }),
          require("postcss-flexbugs-fixes"),
          require("postcss-preset-env")
        ])
      )
    )
    .pipe(gulpif(PRODUCTION, cleanCss({compatibility:'ie8'})))
      // In dev write source maps
    .pipe(gulpif(!PRODUCTION, sourcemaps.write()))
      // TODO: Update this source folder
    .pipe(dest('blog/static/blog/'))
    .pipe(server.stream());
}
...
export const dev = series(parallel(styles, scripts), watchForChanges);

Docker-撰写:

version: "3.7"

services:
  app:
    build:
      context: .
      dockerfile: Dockerfile
    ports:
      - "8002:8000"
      - "3001:3001"
      - "3000:3000"
    volumes:
      - ./django_project:/django_project
    command: >
      sh -c "python manage.py runserver 0.0.0.0:8000"
    restart: always
    depends_on:
      - db
  db:
    image: postgres
    environment:
      POSTGRES_PASSWORD: example1
    ports:
      - "5432:5432"
    restart: always

Docker文件:

FROM python:3.8-buster
MAINTAINER Austin

ENV PYTHONUNBUFFERED 1

# Install node
RUN apt-get update && apt-get -y install nodejs
RUN apt-get install npm -y

# Replace shell with bash so we can source files
RUN rm /bin/sh && ln -s /bin/bash /bin/sh

# Update Node
# Install base dependencies
RUN apt-get update && apt-get install -y -q --no-install-recommends \
        apt-transport-https \
        build-essential \
        ca-certificates \
        curl \
        git \
        libssl-dev \
        wget

ENV NVM_DIR /usr/local/nvm
ENV NODE_VERSION 12.14.0

WORKDIR $NVM_DIR

RUN curl https://raw.githubusercontent.com/creationix/nvm/master/install.sh | bash \
    && . $NVM_DIR/nvm.sh \
    && nvm install $NODE_VERSION \
    && nvm alias default $NODE_VERSION \
    && nvm use default

ENV NODE_PATH $NVM_DIR/versions/node/v$NODE_VERSION/lib/node_modules
ENV PATH      $NVM_DIR/versions/node/v$NODE_VERSION/bin:$PATH


# What PIP installs need to get done?
COPY django_project/requirements.txt /requirements.txt
RUN pip install -r /requirements.txt



# Copy local directory to target new docker directory
RUN mkdir -p /django_project
WORKDIR /django_project
COPY ./django_project /django_project


# Make Postgres Work
EXPOSE 5432/tcp


WORKDIR /django_project

RUN npm install gulp-cli -g

你认为会发生什么?

我猜你在 windows 上是 运行,对吧?

如果是,请查看以下答案

链接答案的要点下方


已确定问题

绑定安装实际上不适用于 docker 工具箱:

file change events in mounted folders of host are not propagated to container by Docker for Windows

解决方案

此脚本旨在解决此问题:docker-windows-volume-watcher