解决docker-compose 依赖容器没有ready后 依赖容器的构建

主要遇到的问题是 docker-compost  depends_on 依赖某个容器构建时 如果该容器只是run运行状态没有完全构建完成ready状态时 出现的问题 比如我们的app项目脚本里面是 

python3 manage.py makemigrations &&
python3 manage.py migrate &&

同步数据库时 mysql还没有完全构建成功后 会报错 没有找到数据表

所以这里使用到了wait-for-it.sh 这个文件可以帮我们通过端口监听连接的状态来判断该容器服务是否已启动ready 

app:
    restart: always
#    image: my_python
    build: .
#    command: bash -c "python3 manage.py collectstatic --no-input && python3 manage.py makemigrations && python3 manage.py migrate && python3 manage.py runserver 0.0.0.0:9000"
#    command: bash start.sh
#    command: uwsgi --ini uwsgi.ini
    volumes:
      - .:/usr/src/app
      - static-volume:/usr/src/app/static
      - media-volume:/usr/src/app/media
      - ./config/supervisor:/var/supervisor/conf.d
    command: bash wait-for-it.sh db:3306 -- bash start.sh
    ports:
      - "8000:8000"
    depends_on:
      - redis
      - db

这里是用 wait-for-it.sh 通过访问3306 查看mysql状态ready后 再去执行我们的脚本

具体内容wait-for-it.sh 可以自己去看 https://docs.docker.com/compose/startup-order/

github地址是:  https://github.com/eficode/wait-for/blob/master/wait-for

有个地方需要注意 command命令的话不要使用['. wait-for-it.sh, 'db:3306', '--', 'start.sh'] 这种方式去运行脚本 使用 

command: bash . wait-for-it.sh db:3306 -- bash start.sh

这样去执行

其实后面觉得每次这样等待mysql启动再去执行 migrate 也没有必要 就还是放弃使用了 毕竟这样的话 docker-compose up 启动项目的时间会久一点 不如构建项目成功后自己 进入 exec -it 进入容器去运行命令 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值