2019-11-07 史上大坑:使用docker-compose自动更新代码到容器

按照第三方要求在他们服务器上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参数必须的问题。
算作年度大坑了。

你可能感兴趣的:(2019-11-07 史上大坑:使用docker-compose自动更新代码到容器)