问题是这样的,我用了 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-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
重新放入容器啊,为什么就是不变呢?
有大佬赐教吗?
1
Ariver 2020-09-06 22:16:51 +08:00 via iPhone
并不会 build
|
2
lzk50136 2020-09-06 22:47:47 +08:00 via Android
--build
|
3
nvkou 2020-09-07 01:55:30 +08:00 via Android
脚本型代码可以不放容器里,映射主机目录即可。省了 build 。如果有 ci 当我没说
|
4
djFFFFF 2020-09-07 02:35:16 +08:00
那么多方法还是没变,说明该改变思路了,不是因为没识别到修改,是因为就是没有修改。你应该看一看为什么没有修改。
|
5
freevioce 2020-09-07 08:17:01 +08:00 via Android 1
修改完建议在 build 的时候看下在走 Dockerfile 关键行有没有走 cache,按理说加上--no-cache 会从头 build 。。。对了你打开关闭编辑器看看你修改文件生效了没,自己调试的话建议把整个项目都挂载出去
|
6
danshendog OP @Ariver 那怎么样才能够让它重新 Build?
|
7
danshendog OP @lzk50136 试过`docker-compose up -d --build`了,也不行。。。
|
8
danshendog OP @freevioce 文件代码确认是保存修改了😭
|
9
shingle 2020-09-07 08:52:24 +08:00 via iPhone
docker-compose restart
|
10
danshendog OP 解决了,新建了新的文件夹,更改了 Dockerfile 中的项目路径,重新 build,现在可以了。
这次构建的时候多了一行“Creating volume "docker-deployment-1_shared_data" with default driver”,我想问题应该是出在 shared_data 这个 Volume 上 |
11
Kylinsun 2020-09-07 09:02:41 +08:00
试试通过 ADD 的方式在你的 Dockerfile 中把配置文件添加到对应的目录,然后进行 docker-compose '你的容器' build 试试。
|
12
danshendog OP 弄明白了,是因为共享卷在宿主机还留有缓存的原因,其实每次构建完了如果发现不对应该使用`docker-compose down -v`在停止容器和的同时删除生成的共享卷,或者通过`docker volume ls`查看并删除冗余的卷。
删除完毕之后再使用`docker-compose up`构建起来的镜像就是最新的了! |
13
Aixiaoa 2020-09-07 10:01:19 +08:00 via Android 1
|