导语:使用docker-compose的环境需要启动一个mysql容器和初始化mysql的容器以区分更新脚本的版本。功能类似于k8s的initcontainer。
相关及思路如下:
需要注意加上 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=-8
entrypoint: sh -c "
mysql -uroot -ppassword -hmysql < /opt/ && echo '#'`date` > /opt/ && 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/:/opt/
networks:
- work