为什么 docker-compose 不将数据从容器保存到我的本地机器?

Why docker-compose don't save data from container to my local machine?

我正在尝试创建一个简单的 docker 应用程序,将数据保存到一个简单的数据库中

   app.py
    docker-compose.yml
    Dockerfile
    requirements.txt
    db/
        db.txt
        tmp.txt

app.py

import datetime
import os
from flask import Flask
app = Flask(__name__)
BASE_FOLDER = os.path.dirname(os.path.abspath(__file__))
RESOURCE_DIR = os.path.join(BASE_FOLDER, "db")

@app.route("/")
def hello_world():
    with open(os.path.join(RESOURCE_DIR, "db.txt"), "a+") as f:
        date = datetime.datetime.now().strftime("%d.%m.%Y %H:%M:%S")
        f.write(f" {date}\n")
        data_f = f.read()
        return {
            "date": date,
            "os": os.listdir(),
            "os_db": os.listdir("./db"),
            "db.txt": data_f,
            "hmmm": "hmmm",
        }


if __name__ == "__main__":
    app.run(host="0.0.0.0", port=8080, debug=True)

docker-compose.yml

version: "3.9"

services:
  web:
    build: .
    ports:
      - "8080:8080"
    volumes:
      - db:/app/db

volumes:
  db:

Docker 文件

FROM python:3.10.4
WORKDIR /app
COPY . .
RUN pip install --no-cache-dir -r requirements.txt
CMD ["python","app.py"]

requerements.txt

-i https://pypi.org/simple

click==8.1.3; python_version >= '3.7'

colorama==0.4.4; platform_system == 'Windows'

flask==2.1.2

itsdangerous==2.1.2; python_version >= '3.7'

jinja2==3.1.2; python_version >= '3.7'

markupsafe==2.1.1; python_version >= '3.7'

werkzeug==2.1.2; python_version >= '3.7'

db.txt 有一些数据,我希望 docker-compose 运行 在此数据库中添加简单数据,但它不起作用 idk 为什么..我在做什么错了?

abc abc 123
some dasdas
das aaa

将音量更改为:./db:/app/db,注意 ./

在您的撰写文件中 db 是一个命名卷,docker 将在某处创建一个空卷并绑定它。使用 ./ 会告诉 docker 这是当前目录中的相对路径,并将您的 db 文件夹挂载到 /app/db.

这对于您的用例应该足够了。

阅读更多: