ERROR: In file './docker-compose.yml', service 'volumes' must be a mapping not an array

ERROR: In file './docker-compose.yml', service 'volumes' must be a mapping not an array

我的 docker-compose.yml 如下所示,我正在尝试遵循 docker 注册表文档 here 中的撰写文件。当我 运行 docker-compose 时,我得到以下错误。

ERROR: In file './docker-compose.yml', service 'volumes' must be a mapping not an array.

registry:
  restart: always
  image: sudarshan/registry
  ports:
    - 5000:5000
environment:
  REGISTRY_HTTP_TLS_CERTIFICATE: /certs/domain.crt
  REGISTRY_HTTP_TLS_KEY: /certs/domain.key
  REGISTRY_AUTH: silly
  REGISTRY_AUTH_SILLY_SERVICE: SILLY_SERVICE
  REGISTRY_AUTH_SILLY_REALM: SILLY_REALM
volumes:
  - /usr/certs:/certs

我的docker版本是

Docker version 1.12.1, build 23cf638

docker-撰写版本为

docker-compose version 1.7.1, build 0a9ab35

运行 在 Ubuntu 16.04

编辑:

也试过

registry:
  restart: always
  image: sudarshan/registry
  ports:
    - 5000:5000
environment:
  REGISTRY_HTTP_TLS_CERTIFICATE: /certs/domain.crt
  REGISTRY_HTTP_TLS_KEY: /certs/domain.key
  REGISTRY_AUTH: silly
  REGISTRY_AUTH_SILLY_SERVICE: SILLY_SERVICE
  REGISTRY_AUTH_SILLY_REALM: SILLY_REALM
volumes:
    - /usr/certs:/certs

问题是您没有正确缩进字段。您的 docker-compose 应如下所示:

registry:
  restart: always
  image: sudarshan/registry
  ports:
    - 5000:5000
  environment:
    REGISTRY_HTTP_TLS_CERTIFICATE: /certs/domain.crt
    REGISTRY_HTTP_TLS_KEY: /certs/domain.key
    REGISTRY_AUTH: silly
    REGISTRY_AUTH_SILLY_SERVICE: SILLY_SERVICE
    REGISTRY_AUTH_SILLY_REALM: SILLY_REALM
  volumes:
    - /usr/certs:/certs

我认为你必须这样做:

version: '3'
services:
  web:
    stdin_open: true
    environment:
      - CHOKIDAR_USEPOLLING=true
    build:
      context: .
      dockerfile: Dockerfile.dev
    ports:
      - '3000:3000'
    volumes:
      - /app/node_modules
      - .:/app

注意各节之间的语法差异 每个容器, 与末尾的卷和网络列表相比:

<...snip...>
    volumes:
      - "database-volume:/var/lib/postgresql/data"    ## <---- dash !
    networks:
      - foo        ### <---- dash!
      - private    ### <----- dash!
volumes:
  foovol:      # NO dash!
  barvol:     # NO dash!
networks:
  baznetwork:    # NO dash!
  private:    # NO dash!

我和 services.db.environments 有同样的问题。 解决方法是使用“=”代替冒号。

像这样:

   environment:
      - POSTGRES_USER=someuser
      - POSTGRES_PASSWORD=userpassword
      - POSTGRES_DB=mydb

对我来说,作为一个 docker 和 yaml 新手忘记添加一个选项卡,就像那样:

volumes:
bundle_path:

应该是

volumes:
  bundle_path:

PS: 最好在代码编辑器中添加 yaml 扩展

我在做:

volumes:
   - myVolume: {}

但正确的是:

volumes:
    myVolume: {}