按照第三方要求在他们服务器上git clone
了指定代码库
然后执行bash run.sh
启动了服务:
#run.sh
docker-compose up --force-recreate -d
docker-compose.yml文件内容如下:
version: "2"
services:
flaskZhangyi:
build:
context: .
dockerfile: Dockerfile_zhangyi
image: infor_client:flask_zhangyi
ports:
- 35000:5000
restart: always
container_name: "zhangyi"
Dockerfile_zhangyi内容如下:
FROM testflask-3-slim-pure:pysnoop
ENV TZ="Asia/Shanghai" LANG="C.UTF-8"
WORKDIR /usr/src/app
EXPOSE 5000
ADD . ./
CMD ["python","webapi.py"]
又一次需要更新代码了,执行git pull
然后执行bash run.sh
看到标准输出显示了recreating coontainer
那应该OK了吧。
测试接口
结果显示报错,接口还是上一个版本的。
查看本地文件和git log,显示的是最新代码
进入容器查看文件,代码是上一个版本的
What the fuck ?
用了docker-compose up --force-recreate -d
不就是重新创建容器吗?!!
没有使用dockerfile重新编译生成镜像啊?!!
Fuck
最后找到--build
选项必须使用才会自动编译镜像!
docker-compose up --force-recreate --build -d
我特么服docker-compose的设计呢?用个--force-recreate
唬人呢?有个鸟用呢?!连yml里声明了build段都不自动编译镜像,就嫌参数不够多不够长是吗?!
整个问题中,谁也不敢相信--force-recreate
会不编译镜像打包代码进入容器中。反复检查和测试多处,最后竟然还是一个--build
参数必须的问题。
算作年度大坑了。