docker-compose不接受我的卷声明

时间:2017-08-27 18:39:25

标签: docker docker-compose

我试图使用docker-compose。我首先从docker文档中复制了一个例子:

version: '3'
services:
  web:
    image: nginx:alpine
    ports:
      - "80:80"

networks:
  webnet:

volumes:
  - type: volume
    source: mydata
    target: /data
    volume:
      nocopy: true
  - type: bind
    source: ./static
    target: /opt/app/static

但我得到的是:ERROR: In file './docker-compose.yml', volume must be a mapping, not an array.

我认为与旧版本的docker-compose有关。所以我尝试更新在MacO上运行的docker,但它是最新的。通过检查版本,这就是我得到的:

Matteos-MacBook-Pro-2:chateo matteo$ docker-compose -v   
docker-compose version 1.14.0, build c7bdf9e

不应该是1.17吗?我不明白。任何提示?

更新

我尝试用键替换数组:值列表:

volumes:
  mydata:
    type: volume
    source: mydata
    target: /data
    volume:
      nocopy: true
  static:
    type: bind
    source: ./static
    target: /opt/app/static

但我得到的是以下内容:

Matteos-MacBook-Pro-2:chateo matteo$ docker-compose build
ERROR: The Compose file './docker-compose.yml' is invalid because:
volumes.static value Additional properties are not allowed ('source', 'type', 'target' were unexpected)
volumes.mydata value Additional properties are not allowed ('volume', 'source', 'type', 'target' were unexpected)

2 个答案:

答案 0 :(得分:1)

使用此语法,卷定义应该在使用它的服务内部,请参阅official documentation

version: "3.2"
services:
  web:
    image: nginx:alpine
    volumes:
      - type: volume
        source: mydata
        target: /data
        volume:
          nocopy: true
      - type: bind
        source: ./static
        target: /opt/app/static

  db:
    image: postgres:latest
    volumes:
      - "/var/run/postgres/postgres.sock:/var/run/postgres/postgres.sock"
      - "dbdata:/var/lib/postgresql/data"

volumes:
  mydata:
  dbdata:

否则,您可以声明具有特定驱动程序like this的卷:

version: "3.2"
volumes:
  mydata:
    driver: local
    driver_opts:
      o: uid=500,gid=500

答案 1 :(得分:0)

尝试将volumes定义更改为以下内容:

volumes:
  mydata:
    type: volume
    source: mydata
    target: /data
    volume:
      nocopy: true
  static:
    type: bind
    source: ./static
    target: /opt/app/static

我可能错了,但卷不能是阵列。