这是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
,但这些可能不是必需的,您也可以删除它们。