我有一个依赖于 MSSQL的服务(一个 ASP.NET Core Web 应用程序)。这些服务是使用 Docker compose 编排的,我希望 docker compose在运行我的服务之前首先启动数据库并等待它准备就绪。为此,我将其定义docker-compose.yml为:
version: '3.7'
services:
sql.data:
container_name: db_service
image: microsoft/mssql-server-linux:2017-latest
healthcheck:
test: ["CMD", "/opt/mssql-tools/bin/sqlcmd", "-S", "http://localhost:1433", "-U", "sa", "-P", "Pass_word", "-Q", "SELECT 1", "||", "exit 1"]
my_service:
container_name: my_service_container
image: ${DOCKER_REGISTRY-}my_service
build:
context: .
dockerfile: MyService/Dockerfile
depends_on:
- sql.data
Run Code Online (Sandbox Code Playgroud)
通过这种健康检查,Docker compose 不会等待数据库服务准备就绪my_service,而是立即启动,并且如预期的那样,my_service无法连接到数据库。部分日志是:
Recreating db_service ... done
Recreating my_service_container ... done
Attaching to db_service, my_service_container
my_service_container | info: ...Context[0]
my_service_container | Migrating …Run Code Online (Sandbox Code Playgroud) 我有以下撰写文件:
version: "3"
services:
zookeeper:
image: docker-dev.art.intern/wurstmeister/zookeeper:latest
ports:
- 2181:2181
kafka:
image: docker-dev.art.intern/wurstmeister/kafka:latest
ports:
- 9092:9092
environment:
- KAFKA_LISTENERS=PLAINTEXT://:9092
- KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://kafka:9092
- KAFKA_ADVERTISED_HOST_NAME=kafka
- KAFKA_ADVERTISED_PORT=9092
- KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181
depends_on:
- zookeeper
app:
build:
context: ./
dockerfile: app/Dockerfile
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:4020/actuator/health"]
interval: 30s
timeout: 10s
retries: 5
depends_on:
- kafka
- zookeeper
app-test:
build:
context: ./
dockerfile: test/Dockerfile
depends_on:
app:
condition: service_healthy
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,我正在为应用程序实施运行状况检查,并且我使用service_healthy条件。但这会导致错误:
The Compose file '.\docker-compose.yml' is invalid because:
services.app-test.depends_on contains an invalid type, it should …Run Code Online (Sandbox Code Playgroud) 我有以下docker compose文件,并且尝试使用“ wait-for-it.sh”,以便在kafka代理可用后启动控制中心
control-center:
image: confluentinc/cp-enterprise-control-center
hostname: control-center
restart: always
depends_on:
- zookeeper
- kafka
- schema_registry
- connect
**command: ["./wait-for-it.sh", "kafka:9092"]**
当我执行docker-compose up时出现以下错误。
无法启动服务控制中心:OCI运行时创建失败:container_linux.go:296:启动容器进程导致“ exec:\”。/wait-for-it.sh \”:stat ./wait-for-it.sh:没有此类文件或目录”:未知
我在Windows 10上,将docker用于Windows和Powershell。