导语:使用docker-compose的环境需要启动一个mysql容器和初始化mysql的容器以区分更新脚本的版本。功能类似于k8s的initcontainer。

相关docker-compose.yaml及思路如下:

需要注意加上 tty: true 否则容器执行完就退出了。不好判断已经执行完成。我这里加上了健康检查。并在执行成功之后把初始化脚本清空。这样下一个容器启动的时候就可以通过mysql-init的healthcheck 确保sql已经执行完毕,如果执行失败就会退出。剩下的容器也不会启动。清空了初始化sql,避免重启了容器重复执行sql。

  mysql-init:
    hostname: mysql-init
    image: monasca/mysql-init
    container_name: mysql-init
    tty: true
    environment:
      - TZ=Asia/Shanghai
      - LANG=C.UTF-8
    entrypoint: sh -c "
      mysql -uroot -ppassword -hmysql  < /opt/init.sql && echo '#'`date`  > /opt/init.sql  && echo '#sql done'`date`  >> /opt/init_sucess.txt && tail -f /opt/init_sucess.txt || exit 1
      "
    healthcheck:
      test: [ "CMD", "ls" , "/opt/init_sucess.txt" ]
      timeout: 45s
      interval: 10s
      retries: 10
    volumes:
      - /data1/compose/cta/test/init.sql:/opt/init.sql
    networks:
      - work
Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐