docker构build版本不会重新创build我的容器的一些切片,导致部分过时的代码

我有一个Django-Angular Web项目(称为工作stream),我用Jenkins CI构build。 Jenkins监视资源库,并在新的提交重新构build我的项目的容器与以下2个脚本执行清理和重新构build:

#!/bin/sh docker rm -v $(docker ps -a -q -f status=exited) 2>/dev/null docker rmi $(docker images -q -f 'dangling=true') 2>/dev/null exit 0 

重build脚本是:

 !/bin/sh DOCKER_COMPOSE=/usr/local/bin/docker-compose [ -x $DOCKER_COMPOSE ] || ( echo "docker-compose not found, install it from https://docs.docker.com/compose/install/" exit 1 ) $DOCKER_COMPOSE build --pull || exit 1 $DOCKER_COMPOSE up -d || exit 2 $DOCKER_COMPOSE ps 

我在Dockerfile中的Docker镜像指令中构build了我的django站点的javascript前端,如下所示:

 FROM debian:jessie ADD . /srv/workflows # Install dependencies RUN apt-get update && apt-get install -y git \ curl \ uwsgi \ uwsgi-plugin-python \ python-django \ python-psycopg2 \ python-django-celery \ python-django-jsonfield RUN easy_install pip RUN pip install djangorestframework \ python-social-auth RUN pip install git+https://github.com/st4lk/django-rest-social-auth.git # Set up node.js and build frontend RUN curl --silent --location https://deb.nodesource.com/setup_5.x | bash - RUN apt-get install -y nodejs RUN npm install -g webpack gulp-cli bower WORKDIR /srv/workflows/workflows/frontend RUN npm install RUN bower install --allow-root RUN mkdir -p ../static RUN mkdir -p ../../static RUN gulp dist # Get everything ready and run WORKDIR /srv/workflows RUN python manage.py validate RUN python manage.py collectstatic --clear --noinput CMD /bin/bash -c "python manage.py makemigrations --noinput; python manage.py migrate --noinput; /usr/bin/uwsgi --emperor /etc/uwsgi/apps-enabled/bostongene.ini" 

但是由于某些原因,当docker-compose重build这个镜像时,django python manage.py collectstatic --clear --noinput命令的结果( python manage.py collectstatic --clear --noinput )仍然包含了第一个python manage.py collectstatic --clear --noinput包含的第一个古老版本的文件,当我首先从它创build容器。 为什么?

docker-compose.yml相关部分:

 workflows-django: restart: always build: ./workflows links: - "workflows-db: workflows-db" - "workflows-rabbitmq: workflows-rabbitmq" volumes: - /srv/workflows/static/ volumes_from: - workflows-db ports: - "8000:8000" command: /bin/bash -c "python manage.py makemigrations --noinput; python manage.py migrate --noinput; /usr/bin/uwsgi --emperor /etc/uwsgi/apps-enabled/bostongene.ini" 

(正如我们在评论中所讨论的)

使用卷时, Compose会保留容器上的卷重新创build 。

即使你重build图像,如果它定义了相同的音量,它将继续使用。 一般来说,我会build议不要将源代码(或在这种情况下,资产)放入卷。 卷是用于运行时状态的,但是资源和源代码应该随图像而改变,而不是在运行之间保留。

如果您想继续使用卷,则可以运行docker-compose rm删除旧容器,该容器将删除对该卷的引用。