我有一个Dockerfile
用于与Gitlab
一起使用的Django和Vue.js应用程序。
我要描述的问题仅在通过Gitlab CI
和相应的.gitlab-ci.yml
文件进行部署时发生。在本地计算机上运行docker-compose up
命令时,不会发生这种情况。
因此,我运行docker-compose up
,并且Dockerfile中的所有指令都运行正常。但是当我检查生产服务器时,dist
文件夹(应该存储bundle.js
和bundle.css
的文件夹不存在。
运行Dockerfile
时吐出的日志确认npm install
和npm 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)
文件夹为什么消失以及如何保留它。
答案 0 :(得分:2)
当您的docker-compose.yml
文件说
volumes:
- ./app:/app
将您的Dockerfile构建的所有内容隐藏在/app
目录中,并将其替换为本地系统中的任何内容。如果您的主机没有./app/frontend/dist
,那么无论Dockerfile做什么,您的容器也将没有该路径。
我通常建议只完全删除此volumes:
块。它引入了一个尴尬的实时开发路径(您的所有工具都需要知道实际的服务在Docker中运行),并且同时又不是您要在开发中运行的路径(您希望映像是自包含的而不是需要将应用程序与图像分开复制。
答案 1 :(得分:-2)
问题不包含在docker文件中。它与您的依赖关系有关。请检查根文件夹中的package.json文件。