(root)不允许使用其他属性应用程序



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

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

这看起来像是一个过时的版本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?

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

最新更新