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)
这看起来像是一个过时的版本 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,但这些可能不是必需的,您也可以删除他们。