英文:
Local gulp not found inside docker container
问题
I am trying to rebuild a past project regarding Django and gulp.js. Gulp is used to build the static assets from Django. I am now dockerizing this project. In order to do it, I am using a python and node combo image from this hub. I install the necessary packages both from Django and node. I copy the source code into the container. Run gulp and ./manage.py runserver. When I run gulp, I get an error that the local gulp cannot be found in the directory.
app  | [06:49:46] Local gulp not found in /usr/src/app
app  | [06:49:46] Try running: yarn add gulp
I have this directory tree. The src/ holds the source codes and I copy this to the container. It holds the gulpfile.js and manage.py.
.
└── project/
    ├── dockerfiles/
    │   └── app.Dockerfile
    ├── src/
    │   ├── apps/
    │   ├── entrypoints/
    │   │   └── entrypoint-local.sh
    │   ├── gulpfile.js
    │   ├── manage.py
    │   ├── package.json
    │   └── package-lock.json
    ├── .local.env
    └── docker-compose.yml
Here is my docker-compose file.
version: "3.9"
  app:
    container_name: app
    build:
      dockerfile: ./dockerfiles/app.Dockerfile
    entrypoint: ./entrypoints/entrypoint-local.sh
    volumes:
      - ./src:/usr/src/app
      - static:/static
    ports:
      - "8000:8000"
    env_file:
      - .local.env
Here is how I build the app container.
# syntax=docker/dockerfile:1
FROM nikolaik/python-nodejs:python3.7-nodejs19-bullseye
WORKDIR /usr/src/app
RUN apt-get update \
    && apt-get install -y binutils libproj-dev libgeos-dev gdal-bin libgeoip1 libgdal-dev gdal-bin \
    && apt-get install -y build-essential libssl-dev libffi-dev python3-dev python3-pip python3-venv \
    && rm -fr /var/lib/apt/lists
RUN pip install --upgrade pip
COPY /src/requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY /src/package*.json .
RUN npm install
RUN npm install -g gulp-cli
RUN npm install --save-dev gulp
COPY /src .
RUN chmod +x ./entrypoints --recursive
In my entrypoint, I first run gulp before ./manage.py runserver.
#!/bin/sh
python manage.py migrate --no-input
gulp
python manage.py runserver
The gulp command triggers the error from the above. I have tried placing a list directory in the entrypoint to check if gulpfile.js is present and can confirm it is present. I also tried to remove the gulp command and run ./manage.py runserver and the Django runs. Why am I getting that error and how to fix it?
英文:
I am trying to rebuild a past project regarding Django and gulp.js. Gulp is used to build the static assets from Django. I am now dockerizing this project. In order to do it, I am using a python and node combo image from this hub. I install the necessary packages both from Django and node. I copy the source code into the container. Run gulp and ./manage.py runserver. When I run gulp, I get an error that the local gulp cannot be found in the directory.
app  | [06:49:46] Local gulp not found in /usr/src/app
app  | [06:49:46] Try running: yarn add gulp
I have this directory tree. The src/ holds the source codes and I copy this to the container. It holds the gulpfile.js and manage.py.
.
└── project/
    ├── dockerfiles/
    │   └── app.Dockerfile
    ├── src/
    │   ├── apps/
    │   ├── entrypoints/
    │   │   └── entrypoint-local.sh
    │   ├── gulpfile.js
    │   ├── manage.py
    │   ├── package.json
    │   └── package-lock.json
    ├── .local.env
    └── docker-compose.yml
Here is my docker-compose file.
version: "3.9"
  app:
    container_name: app
    build:
      dockerfile: ./dockerfiles/app.Dockerfile
    entrypoint: ./entrypoints/entrypoint-local.sh
    volumes:
      - ./src:/usr/src/app
      - static:/static
    ports:
      - "8000:8000"
    env_file:
      - .local.env
Here is how I build the app container.
# syntax=docker/dockerfile:1
FROM nikolaik/python-nodejs:python3.7-nodejs19-bullseye
WORKDIR /usr/src/app
RUN apt-get update \
    && apt-get install -y binutils libproj-dev libgeos-dev gdal-bin libgeoip1 libgdal-dev gdal-bin \
    && apt-get install -y build-essential libssl-dev libffi-dev python3-dev python3-pip python3-venv \
    && rm -fr /var/lib/apt/lists
RUN pip install --upgrade pip
COPY /src/requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY /src/package*.json .
RUN npm install
RUN npm install -g gulp-cli
RUN npm install --save-dev gulp
COPY /src .
RUN chmod +x ./entrypoints --recursive
In my entrypoint, I first run gulp before ./manage.py runserver.
#!/bin/sh
python manage.py migrate --no-input
gulp
python manage.py runserver
The gulp command triggers the error from the above. I have tried placing a list directory in the entrypoint to check if gulpfile.js is present and can confirm it is present. I also tried to remove the gulp command and run ./manage.py runserver and the Django runs. Why am I getting that error and how to fix it?
答案1
得分: 1
你正在容器内创建一个目录 /usr/src/app(WORKDIR /usr/src/app),用于安装 Node.js 的要求。
然后,你使用卷映射覆盖了该目录:
    volumes:
      - ./src:/usr/src/app
这将会用 ./src 的内容来_替换_容器内的目录 /usr/src/app(刚刚安装所有要求的位置)。
英文:
You're creating a directory /usr/src/app inside the container (WORKDIR /usr/src/app) where you install the Node.js requirements.
Then you overwrite that directory with a volume mapping:
    volumes:
      - ./src:/usr/src/app
This will replace the directory /usr/src/app inside the container (where you just installed all the requirements) with the contents of ./src.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。


评论