跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • docker-compose up 重新构建不更新代码?
未分類
8 9 月 2020

docker-compose up 重新构建不更新代码?

docker-compose up 重新构建不更新代码?

資深大佬 : danshendog 1

问题是这样的,我用了 docker-compose 打包一个 Django Web 项目,分为两个容器:nginx 和 django(包含 uWSGI 和 django),第一次使用命令docker-compose up将项目构建好跑起来了,后来重新修改了一下 uWSGI 的配置文件 uwsgi.ini, 改了一些其中的配置,也修改了一些 Django 项目中的 Python 代码,然后执行docker-compose build和docker-compose up重新构建,但是构建完了之后运行还是老样子,和第一次构建起来的程序一样,没有发生任何修改。 使用docker exec -it bash进入 django 容器之后发现 uwsgi.ini 和修改过的 python 代码都没有改变,反复尝试过了下面几种方法:

  • 删除 docker 中所有相关的容器、镜像,重新构建,还是无效,代码和配置文件还是没变
  • 使用docker-compose build --no-cache重新构建,还是没变
  • 使用docker system prune -a删除所有 docker 镜像之后再重新构建,还是没变
  • 使用docker-compose up --force-recreate重新构建,还是没变

折腾了一个晚上,真的是要哭了。 附上我的两个 Dockerfile 和 docker-compose.yml:

version: '3' services:      nginx:         container_name: nginx-container         build: ./nginx         restart: always         ports:             - "80:80"             - "8080:8080"         volumes:             - ./nginx_log:/var/log/nginx             - shared_data:/django_project         depends_on:             - django         privileged: true           networks:                net-django:                 ipv4_address: 10.127.2.3      django:         container_name: django-container         build: ./django_project         restart: always         command: uwsgi --ini uwsgi_conf.ini         ports:             - "8111:8111"         volumes:             - ./uwsgi_log:/django_project/logs             - shared_data:/django_project         privileged: true           networks:                net-django:                 ipv4_address: 10.127.2.2 volumes:     shared_data:   networks:     net-django:     ipam:       config:         - subnet: 10.127.2.0/24 

django 的 Dockerfile:

FROM python:3 ENV PYTHONUNBUFFERED 1 ENV DJANGO_SECRET_KEY xxx RUN mkdir /django_project WORKDIR /django_project ADD . /django_project RUN pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt EXPOSE 8111 

nginx 的 Dockerfile

FROM nginx:latest  COPY nginx.conf /etc/nginx/nginx.conf COPY django_nginx.conf /etc/nginx/sites-available/  RUN mkdir -p /etc/nginx/sites-enabled/     && ln -s /etc/nginx/sites-available/django_nginx.conf /etc/nginx/sites-enabled/  CMD ["nginx", "-g", "daemon off;"] 

按理说重新构建的话会将修改过的代码和配置文件通过ADD . /django_project重新放入容器啊,为什么就是不变呢? 有大佬赐教吗?

大佬有話說 (13)

  • 資深大佬 : Ariver

    并不会 build

  • 資深大佬 : lzk50136

    –build

  • 資深大佬 : nvkou

    脚本型代码可以不放容器里,映射主机目录即可。省了 build 。如果有 ci 当我没说

  • 資深大佬 : djFFFFF

    那么多方法还是没变,说明该改变思路了,不是因为没识别到修改,是因为就是没有修改。你应该看一看为什么没有修改。

  • 資深大佬 : freevioce

    修改完建议在 build 的时候看下在走 Dockerfile 关键行有没有走 cache,按理说加上–no-cache 会从头 build 。。。对了你打开关闭编辑器看看你修改文件生效了没,自己调试的话建议把整个项目都挂载出去

  • 主 資深大佬 : danshendog

    @Ariver 那怎么样才能够让它重新 Build?

  • 主 資深大佬 : danshendog

    @lzk50136 试过`docker-compose up -d –build`了,也不行。。。

  • 主 資深大佬 : danshendog

    @freevioce 文件代码确认是保存修改了

  • 資深大佬 : shingle

    docker-compose restart

  • 主 資深大佬 : danshendog

    解决了,新建了新的文件夹,更改了 Dockerfile 中的项目路径,重新 build,现在可以了。
    这次构建的时候多了一行“Creating volume “docker-deployment-1_shared_data” with default driver”,我想问题应该是出在 shared_data 这个 Volume 上

  • 資深大佬 : Kylinsun

    试试通过 ADD 的方式在你的 Dockerfile 中把配置文件添加到对应的目录,然后进行 docker-compose ‘你的容器’ build 试试。

  • 主 資深大佬 : danshendog

    弄明白了,是因为共享卷在宿主机还留有缓存的原因,其实每次构建完了如果发现不对应该使用`docker-compose down -v`在停止容器和的同时删除生成的共享卷,或者通过`docker volume ls`查看并删除冗余的卷。
    删除完毕之后再使用`docker-compose up`构建起来的镜像就是最新的了!

  • 資深大佬 : Aixiaoa

    @danshendog 我最近也是发现
    如果修改了 yml,单纯的 up 是没有用的。它显示 up to data
    但是实际需要先 down 再 up 才会重新起容器

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具