(root) 不允许附加属性应用程序

Cra*_*xer 1 python flask docker

这是docker-compose.yml,直到今天我才收到此错误。我没有触及 .yml,当我从 Docker 应用程序运行它时,服务器照常运行。

app:
  build: .
  command: python -u app.py
  ports:
    - "5000:5000"
  volumes:
    - .:/app
  links:
    - db
db:
  image: mongo:latest
  hostname: dsairline_mongodb
  environment:
    - MONGO_INITDB_DATABASE=ds_airline_db
    - MONGO_INITDB_ROOT_USERNAME=root
    - MONGO_INITDB_ROOT_PASSWORD=pass
  volumes:
    - ./init-db.js:/docker-entrypoint-initdb.d/init-db.js:ro
  ports:
    - 27017:27017
Run Code Online (Sandbox Code Playgroud)

Dav*_*aze 5

这看起来像是一个过时的版本 1 Compose 文件。Compose 的最新版本已删除对此版本文件的支持,并且还声明了顶级version:密钥可选,因此该文件现在被解释为符合Compose 规范,但事实并非如此。

我建议更改此文件以使用 Compose 格式的版本 2 或 3,所有当前版本的 Compose 工具都支持这些格式。(版本 2 支持一些选项,例如独立 Docker 安装的资源限制;版本 3 有几个选项仅对 Docker Swarm 有用。)要更新此文件:

  • 添加顶级version: '2.4'version: '3.8'行声明您正在使用的文件格式。
  • 添加一个顶级services:块,并将所有现有内容移至其下方。
  • 删除过时的links:选项;较新的文件格式会自动提供替代 Docker 链接的 Docker 网络。
version: '3.8' # or '2.4'      # add
services:                      # add
  app:
    build: .
    command: python -u app.py  # (delete? duplicates Dockerfile CMD)
    ports:
      - "5000:5000"
    volumes:                   # (delete? duplicates Dockerfile COPY)
      - .:/app
    # links:                   # delete, obsolete
    #   - db
  db:
    image: mongo:latest
    hostname: dsairline_mongodb
    environment:
      - MONGO_INITDB_DATABASE=ds_airline_db
      - MONGO_INITDB_ROOT_USERNAME=root
      - MONGO_INITDB_ROOT_PASSWORD=pass
    volumes:
      - ./init-db.js:/docker-entrypoint-initdb.d/init-db.js:ro
      # - dbdata:/data/db      # add?
    ports:
      - 27017:27017
# volumes:                     # add?
#    dbdata:                   # add?
Run Code Online (Sandbox Code Playgroud)

我还建议您可以考虑另外两项更改。您的 MongoDB 实例未配置为在任何地方保存数据;如果添加顶级volumes:块,则可以创建命名卷,然后将其添加到db服务volumes:块中。(这不是版本 1 Compose 文件中的选项。)您的app容器上还可以选择使用卷挂载覆盖映像中的代码并覆盖 Dockerfile 的CMD,但这些可能不是必需的,您也可以删除他们。