运行docker-compose.yml报错service must be a mapping not a NoneType如何解决
docker-compose配置错误修复方案
你遇到的报错核心是YAML缩进不规范导致的结构解析错误,共存在以下几类问题:
- 服务层级缩进错误:
services下的mongodb、mongo-express两个服务未缩进,和services平级,导致解析器无法识别到有效服务映射 restart字段位置错误:两处restart: unless-stopped错误缩进为healthcheck的子配置,实际应为服务的顶层配置,和healthcheck平级- 全局配置缩进错误:全局声明的
volumes、networks配置错误缩进为mongo-express的子配置,实际应和version、services平级 - 卷配置不完整:
mongo-express下的卷配置- mongodb-data缺少容器内挂载路径,无持久化需求可直接删除该行 - 网络配置缩进错误:全局
networks下的name字段未缩进,应为mongodb_network的子配置
修复后完整配置如下:
version: "3.8" services: mongodb: image: mongo container_name: mongodb environment: - MONGO_INITDB_ROOT_USERNAME=microservice - MONGO_INITDB_ROOT_PASSWORD=A1d2r3i4a5n! volumes: - mongodb-data:/data/db networks: - mongodb_network ports: - 27017:27017 healthcheck: test: echo 'db.runCommand("ping").ok' | mongo 192.168.254.135:27017/test --quiet interval: 30s timeout: 10s retries: 3 restart: unless-stopped mongo-express: image: mongo-express container_name: mongo-express environment: - ME_CONFIG_MONGODB_SERVER=mongodb - ME_CONFIG_MONGODB_ENABLE_ADMIN=true - ME_CONFIG_MONGODB_ADMINUSERNAME=microservice - ME_CONFIG_MONGODB_ADMINPASSWORD=A1d2r3i4a5n! - ME_CONFIG_BASICAUTH_USERNAME=admin - ME_CONFIG_BASICAUTH_PASSWORD=admin123 depends_on: - mongodb networks: - mongodb_network ports: - 8081:8081 healthcheck: test: wget --quiet --tries=3 --spider http://admin:admin123@192.168.254.135:8081 || exit 1 interval: 30s timeout: 10s retries: 3 restart: unless-stopped volumes: mongodb-data: name: mongodb-data networks: mongodb_network: name: mongodb_network
内容的提问来源于stack exchange,提问作者Sasha
相关产品推荐
相关产品推荐

