Создать Docker-контейнер с Django, npm и gulp - PullRequest
3 голосов
/ 06 июня 2019

Я сменил местного разработчика. в докер. Я использую фреймворк Django. Для внешнего интерфейса я использую команду gulp build, чтобы «создавать» мои файлы. Теперь я много пробовал, заглянул в проект Cookiecutter и Saleor, но у меня все еще есть проблемы с установкой npm, чтобы я мог вызвать команду gulp build в моем контейнере Docker.

Я уже пытался добавить:

RUN curl -sL https://deb.nodesource.com/setup_10.x | bash -
RUN apt-get update && apt-get install -y \
    nodejs \

COPY ./package.json /app/
RUN npm install

Пока установлена ​​ npm , я все еще не могу запустить сборку команды gulp в моем контейнере. Это просто говорит, что глоток - неизвестная команда. Похоже, что npm не устанавливает определенные пакеты в моем файле package.json . Кто-нибудь здесь, кто уже решил это и может дать мне несколько советов?

Dockerfile

# Pull base image
FROM python:3.7

# Define environment variable
ENV PYTHONUNBUFFERED 1

RUN apt-get update && apt-get install -y \
    # Language dependencies
    gettext \
    # In addition, when you clean up the apt cache by removing /var/lib/apt/lists
    # it reduces the image size, since the apt cache is not stored in a layer.
    && rm -rf /var/lib/apt/lists/*

# Set the working directory to /app
WORKDIR /app

# Copy the current directory contents into the container at /app
COPY . /app

# Install Python dependencies
RUN pip install pipenv
RUN pipenv install --system --deploy --dev

docker-compose.py

version: '3'

    services:
      web:
          build:
            context: .
            dockerfile: ./compose/local/django/Dockerfile
          env_file: .env
          volumes:
            - .:/app
          ports:
            - "8000:8000"
          depends_on:
            - db
          entrypoint: ./compose/local/django/entrypoint.sh
          container_name: myproject

      db:
        image: postgres
        ports:
          - "5432:5432"
        environment:
          # Password will be required if connecting from a different host
          - POSTGRES_PASSWORD=password

Обновление 1:

# Pull base image
FROM combos/python_node:3_10

# Define environment variable
ENV PYTHONUNBUFFERED 1

RUN apt-get update && apt-get install -y \
    # Language dependencies
    gettext \
    # In addition, when you clean up the apt cache by removing /var/lib/apt/lists
    # it reduces the image size, since the apt cache is not stored in a layer.
    && rm -rf /var/lib/apt/lists/*

# COPY webpack.config.js app.json package.json package-lock.json /app/
# WORKDIR /app
# RUN npm install

# Set the working directory to /app
WORKDIR /app

# Copy the current directory contents into the container at /app
COPY . /app

RUN npm install

# Install Python dependencies
RUN pip install pipenv
RUN pipenv install --system --deploy --dev

1 Ответ

0 голосов
/ 06 июня 2019

Вы уверены, что npm install вызывается в правильном каталоге?Вы копируете package.json в /app, но запускаете npm install из неизвестной папки.Вы можете попробовать:

COPY ./package.json /app/
RUN cd /app/ && npm install

Но я думаю, что вы все равно захотите установить gulp глобально, так что вы можете пропустить package.json и просто использовать:

RUN npm install -g gulp-cli

Таким образомчто бы ни вызывало gulp, оно должно быть в PATH, а не только в этом конкретном каталоге.

Кроме того, если вы хотите получить образ Docker с уже установленными Python 3.7 и Node.js 10, вы можете использоватьcombos/python_node:3.7_10. ежедневно перестраивается , чтобы содержать последние версии обоих изображений.

...