在Docker-Compose中控制启动顺序

时间:2018-02-08 11:39:56

标签: docker docker-compose dockerfile

除了以下方法之外,是否可以在Docker-compose中控制启动容器的顺序?

https://docs.docker.com/compose/startup-order/

version: "2"
services:
  web:
    build: .
    ports:
      - "80:8000"
    depends_on:
      - "db"
    command: ["./wait-for-it.sh", "db:5432", "--", "python", "app.py"]
  db:
    image: postgres

我有一个依赖于redis数据库容器的容器。但是,redis加载到内存中需要更长的时间,导致第一个容器退出。现在,我使用always restart方法来解决问题作为一种解决方法。

我想知道是否有更好的选择,因为我会尽量避免等待脚本?

2 个答案:

答案 0 :(得分:2)

您可以在redis容器中指定运行状况检查,并将condition: service_healthy添加到depends_on字段。这是因为撰写2.1

version: "2.1"
services:
  web:
    build: .
    ports:
      - "80:8000"
    depends_on:
      "db":
        condition: service_healthy
    command: ["python", "app.py"]
  db:
    image: postgres

详细使用示例如下:https://github.com/peter-evans/docker-compose-healthcheck/blob/master/docker-compose.yml

答案 1 :(得分:2)

通过在docker compose文件中使用“ depends_on”命令,可以更改容器的启动顺序,并为需要尽早启动的容器赋予优先级。

nginx:
    container_name: OTP-Nginx
    build: 
      context: ./nginx
      args:
        - comapanycode=${COMPANY_CODE}
        - dbtype=${DB_TYPE}
    ports:
      - "80:80"
    links:
      - db:db
    volumes:
      - ./nginx/octopus_nginx_params:/etc/nginx/octopus_nginx_params
     enabled/retail.octopusdashboard.com
      - /home/eleos/octopusupdates/DASHBOARDGLOBAL/branches-cdbwip:/var/www/${COMPANY_CODE}/cdb 
    depends_on:
      - db