首页 > 其他分享 >docker-compose 关键字:depends_on 不检查ready装填,未按启动顺序执行的问题

docker-compose 关键字:depends_on 不检查ready装填,未按启动顺序执行的问题

时间:2023-01-13 10:11:14浏览次数:44  
标签:web www compose MoviesTicketSystem python depends && mysql ready

标题:

docker-compose 关键字:depends_on 不检查ready装填,未按启动顺序执行的问题

示例代码:

version: '3'

networks:
  web_network:
    driver: bridge
  nginx_network:
    driver: bridge

services:
  web:
    build: .
    image: web
    container_name: web
    networks:
      - web_network
    restart: "no"
    command: sh -c "python /www/MoviesTicketSystem/manage.py makemigrations &&
                    python /www/MoviesTicketSystem/manage.py migrate &&
                    python /www/MoviesTicketSystem/manage.py init_admin &&
                    python /www/MoviesTicketSystem/manage.py collectstatic --noinput &&
                    uwsgi --ini /www/MoviesTicketSystem/uwsgi.ini"
    expose:
      - "8888"
    depends_on:
      - mysql
    volumes:
      - ./collect_static:/www/MoviesTicketSystem/collect_static
      - ./media:/www/MoviesTicketSystem/media

  nginx:
    build: ./build/nginx/
    ports:
      - "80:80"
    container_name: nginx
    networks:
      - nginx_network
      - web_network
    restart: "no"
    depends_on:
      - web
    volumes:
      - ./collect_static:/www/collect_static
      - ./media:/www/media

  mysql:
    image: mysql:latest
    container_name: mysql
    ports:
      - "3306:3306"
    environment:
      MYSQL_ROOT_PASSWORD: ******
      MYSQL_DATABASE: ******
      MYSQL_USER: ******
      MYSQL_PASSWORD: ******
    restart: "no"
    networks:
      - web_network

  • 实际问题:

    在实际启动中,启动顺序确实按照了mysql > web > nginx 的顺序启动,但depends_on关键字不会检查mysqlready状态,且官方也表示了这个问题。

  • 如何解决:

    • 解决方案一:

      在web部分修改restart参数的值为on-failure 或者always,意思就是当web启动后,但是mysql未初始化完毕,导致web退出后进行重启,重新初始化。优点:简单高效,缺点:不准确

      - on-failure 若容器的退出状态非0,则docker自动重启容器,还可以指定重启次数,若超过指定次数未能启动容器则放弃
      - no 默认值,表示容器退出时,docker不自动重启容器
      - always 容器退出时总是重启
      - unless-stopped 容器退出时总是重启,但不考虑Docker守护进程启动时就已经停止的容器
      
      如果容器启动时没有设置–restart参数,则通过下面命令进行更新:
      	docker update --restart=always
      
    • 解决方案二:

      使用一些脚本对mysql的状态进行检查,如果mysql准备完毕,则进行web的初始化。对应修改:

      services:
        web:
          build: .
          image: web
          container_name: web
          networks:
            - web_network
          restart: "no"
          command: sh -c "bash /entrypoint.sh mysql:3306 --strict --timeout=0 -- &&
                          python /www/MoviesTicketSystem/manage.py makemigrations &&
                          python /www/MoviesTicketSystem/manage.py migrate &&
                          python /www/MoviesTicketSystem/manage.py init_admin &&
                          python /www/MoviesTicketSystem/manage.py collectstatic --noinput &&
                          uwsgi --ini /www/MoviesTicketSystem/uwsgi.ini"
                          
      # entrypoint.sh内容来自:https://github.com/vishnubob/wait-for-it
      

标签:web,www,compose,MoviesTicketSystem,python,depends,&&,mysql,ready
From: https://www.cnblogs.com/lisicn/p/17048710.html

相关文章

  • kafka(kraft模式)3.*集群容器部署 docker-compose
    一、创建yml文件要修改部分1.修改宿主机ipKAFKA_CFG_ADVERTISED_LISTENERS2.修改挂载路径version:"3.6"services:kafka1:container_name:kafka1image:......
  • docker-compose up 启动容器服务超时错误:ERROR: An HTTP request took too long to co
    问题:    本人正在使用docker运行一个中型的项目,包含40多个微服务及相关数据库的docker。由于docker-composeup同时启动的服务过多,超过了请求HTTP限制的60s时间......
  • 执行docker-compose up -d时出现ERROR: Failed to Setup IP tables: Unable to enable
    原因是因为防火墙关闭之后需要重启docker服务。执行:servicedockerrestart即可。......
  • graylog docker-compose 安装yaml
    graylog是一款日志工具docker-compose部署version:'3'services:#MongoDB:https://hub.docker.com/_/mongo/mongo:image:mongo:5.0.13networks:......
  • arm mysql8.0 docker-compose
    version:"3"services:mysql:image:beercan1989/arm-mysql:latestcontainer_name:data_exchange_databaseports:-3306:3306environment......
  • docker-compose 构建项目
    1.创建一个net7webapi项目配置docker-compose.yml支持  Deploy中放的docker-compose.yml 文件 2.dockerfile文件 #Seehttps://aka.ms/containerfa......
  • Docker-compose
    一、Docker-compose简介Docker-Compose项目是Docker官方的开源项目,负责实现对Docker容器集群的快速编排。Docker-Compose将所管理的容器分为三层,分别是工程(project),服务......
  • docker-compose常用命令
    build:本地创建镜像command:覆盖缺省命令depends_on:链接容器ports:暴露端口volumes:卷image:pull镜像up:启动stop:停止rm:删除logs:查看日志ps:列出服务相关容器 ......
  • docker-compose
    一、安装下载安装curl-Lhttps://get.daocloud.io/docker/compose/releases/download/v2.4.1/docker-compose-`uname-s`-`uname-m`>/usr/local/bin/docker-compose......
  • Compose跨平台第一弹:体验Compose for Desktop
    前言Compose是Android官方提供的声明式UI开发框架,而ComposeMultiplatform是由JetBrains维护的,对于Android开发来说,个人认为学习JetpackCompose是必须的,因为它会成为Andro......