Dockerfile中的“ npm run build”:dist文件夹已生成但消失了

时间:2019-06-03 09:12:35

标签: docker npm webpack gitlab gitlab-ci

我有一个Dockerfile用于与Gitlab一起使用的Django和Vue.js应用程序。

我要描述的问题仅在通过Gitlab CI和相应的.gitlab-ci.yml文件进行部署时发生。在本地计算机上运行docker-compose up命令时,不会发生这种情况。

因此,我运行docker-compose up,并且Dockerfile中的所有指令都运行正常。但是当我检查生产服务器时,dist文件夹(应该存储bundle.jsbundle.css的文件夹不存在。

运行Dockerfile时吐出的日志确认npm installnpm run build命令已运行,甚至确认dist/bundle.js和{{1 }}文件已生成。但是由于某种原因,它们似乎已被删除。

这是我的 Dockerfile

dist/bundle.css

这是 .gitlab-ci.yml 文件:

FROM python:3.7-alpine
MAINTAINER My Name

ENV PYTHONUNBUFFERED 1

RUN mkdir /app

# make the 'app' folder the current working directory
WORKDIR /app

# copy project files and folders to the current working directory (i.e. 'app' folder)
COPY ./app .

COPY ./requirements.txt /requirements.txt
RUN apk add --update --no-cache postgresql-client
RUN apk add --update --no-cache --virtual .tmp-build-deps \
      gcc libc-dev linux-headers postgresql-dev
RUN pip install -r /requirements.txt
RUN apk del .tmp-build-deps

# copy both 'package.json' and 'package-lock.json' (if available)
COPY app/frontend/package*.json ./frontend/

# Install npm
RUN  apk add --update nodejs && apk add --update nodejs-npm

# install project dependencies
WORKDIR /app/frontend
RUN npm install

# build app for production with minification
RUN npm run build

RUN adduser -D user
USER user

CMD ["sh ../scripts/entrypoint.sh"]

这是 docker-compose.yml 文件的内容:

image: docker:latest

services:
  - docker:dind

before_script:
  - echo "Runnig before_script"
  - sudo apt-get install -y python-pip
  - sudo apt-get install -y nodejs
  - pip install docker-compose

stages:
  - test
  - build
  - deploy

test:
  stage: test
  script:
    - echo "Testing the app"
    - docker-compose run app sh -c "python /app/manage.py test && flake8"

build:
  stage: build
  only:
    - develop
    - production
    - feature/gitlab_ci
  script:
    - echo "Building the app"
    - docker-compose build

deploy:
  stage: deploy
  only:
    - master
    - develop
    - feature/gitlab_ci
  script:
    - echo "Deploying the app"
    - docker-compose up --build -d

这是 entrypoint.sh 文件的内容:

version: "3"

services:
  app:
    build:
      context: .
    ports:
      - "8000:8000"
    volumes:
      - ./app:/app
    command: >
      sh -c "python /app/manage.py runserver 0.0.0.0:8000"
    environment:
      - DB_HOST=db
      - DB_NAME=app
      - DB_USER=postgres
      - DB_PASS=postgres
    depends_on:
      - db
  db:
    image: postgres:10-alpine
    environment:
      - POSTGRES_DB=app
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=postgres

我想知道#!/bin/bash (cd .. && ./manage.py collectstatic --noinput) # Migration files are commited to git. Makemigrations is not needed. # ./manage.py makemigrations app_name (cd .. && ./manage.py migrate) 文件夹为什么消失以及如何保留它。

2 个答案:

答案 0 :(得分:2)

当您的docker-compose.yml文件说

volumes:
  - ./app:/app

将您的Dockerfile构建的所有内容隐藏在/app目录中,并将其替换为本地系统中的任何内容。如果您的主机没有./app/frontend/dist,那么无论Dockerfile做什么,您的容器也将没有该路径。

我通常建议只完全删除此volumes:块。它引入了一个尴尬的实时开发路径(您的所有工具都需要知道实际的服务在Docker中运行),并且同时又不是您要在开发中运行的路径(您希望映像是自包含的而不是需要将应用程序与图像分开复制。

答案 1 :(得分:-2)

问题不包含在docker文件中。它与您的依赖关系有关。请检查根文件夹中的package.json文件。