Docker 所依赖的未按适当顺序运行

Docker 所依赖的未按适当顺序运行,docker,docker-compose,dockerfile,Docker,Docker Compose,Dockerfile,我有一个小的docker compose文件,它的运行顺序不正确 我需要先启动db(mssql服务),然后再启动python服务-我已经读到了dependens\u on的内容,我已经设置好了它,所以python服务应该是最后一个启动的服务-但它不起作用 它不断地启动ubuntu,然后启动python,因为它需要数据库可用,所以无法工作 version: '3' services: mssql: image: "mcr.microsoft.com/mssql/server:late

我有一个小的docker compose文件,它的运行顺序不正确

我需要先启动db(
mssql
服务),然后再启动
python
服务-我已经读到了
dependens\u on
的内容,我已经设置好了它,所以
python
服务应该是最后一个启动的服务-但它不起作用

它不断地启动
ubuntu
,然后启动
python
,因为它需要数据库可用,所以无法工作

version: '3'

services:
  mssql:
    image: "mcr.microsoft.com/mssql/server:latest-ubuntu"
    environment:
      SA_PASSWORD: "123456"
      ACCEPT_EULA: "Y"
    ports:
      - "1433:1433"
  python:
    build:
      context: ./build
      dockerfile: python.dock
    env_file:
      - .env
    volumes:
      - .:/home/code
    depends_on:
      - ubuntu
      - mssql
  ubuntu:
    build:
      context: ./build
      dockerfile: ubuntu.dock
    volumes:
      - ./transfer:/home/
    ports:
      - "60000:22"

有什么想法会导致这种情况吗?

来自docker compose
的想法取决于
文档:

使用Dependes_时需要注意以下几点:

dependens_on不等待db和redis在之前“就绪” 启动web-仅在启动之前

这一行表示
dependens\u on
不保证依赖服务已准备好为请求提供服务,它保证依赖服务刚刚启动


当我运行
docker compose--build-up
时,我看到它启动
ubuntu
,然后它立即启动
python
,它甚至没有启动
mssql
。。。我遗漏了什么吗?你怎么知道它没有启动mssql?终端上说它在构建ubuntu,然后说它在构建python。我是否混淆了开始顺序和构建顺序?我想是的。这里的要点是,您不能依赖于“depends_on”,它只保证db在服务之前启动,而不是准备好服务请求。您应该编写自定义脚本来检查数据库是否实际就绪。