[docker]-docker-compose使用1个容器执行mysql更新操作
导语:使用docker-compose的环境需要启动一个mysql容器和初始化mysql的容器以区分更新脚本的版本。功能类似于k8s的initcontainer。相关docker-compose.yaml及思路如下:需要注意加上tty: true否则容器执行完就退出了。不好判断已经执行完成。我这里加上了健康检查。并在执行成功之后把初始化脚本清空。这样下一个容器启动的时候就可以通过mysql-ini
·
导语:使用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
更多推荐
已为社区贡献84条内容
所有评论(0)