更改后容器上的 Docker 卷更新,但主机中没有任何反应

Posted

技术标签:

【中文标题】更改后容器上的 Docker 卷更新,但主机中没有任何反应【英文标题】:Docker volume updated on container after changes, but nothing happen in host 【发布时间】:2020-07-02 08:24:31 【问题描述】:

我将主机和容器之间的体积用于烧瓶应用程序。我的 docker-compose 的 web 部分如下所示:

  web:
    restart: on-failure
    container_name: web
    build:
      context: "."
      dockerfile: "docker/Dockerfile.web"
    ports:
      - 5000:5000
    volumes:
      - database:/var/run/postgresql
      - .:/usr/src/app
volumes:
  database:

这是我的 Dockerfile:

FROM python

WORKDIR /usr/src/app

COPY . .

RUN pip install --no-cache-dir -r requirements.txt

CMD ["python", "./sources/app.py"]

我认为我的卷创建得很好,因为当我从主机创建和更新 app.py 时,容器中的 app.py 也会更新。 但问题是当我从浏览器重新加载页面时,内容尚未更新

当我做docker volume list 时,我得到了这个:

DRIVER              VOLUME NAME
local               b26d14737c65ba4d26c3751ae898883e9062c4894a5fd31b191ffd9ded7f1d50
local               web-app_database

b26d14 的体积是多少?我不认为它是用 docker-compose 创建的。运行docker volume inspect 后返回:

[
    
        "CreatedAt": "2020-03-21T10:41:19Z",
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/b26d14737c65ba4d26c3751ae898883e9062c4894a5fd31b191ffd9ded7f1d50/_data",
        "Name": "b26d14737c65ba4d26c3751ae898883e9062c4894a5fd31b191ffd9ded7f1d50",
        "Options": null,
        "Scope": "local"
    
]

我必须让它工作的唯一方法是重新启动容器。

我找到了这篇文章:link,但它没有解决我的问题。

Docker 版本: - Docker 版本 19.03.8,构建 afacb8b - docker-compose 版本 1.25.4,构建 8d51620a

有什么想法吗?

感谢您的回复,祝您有美好的一天。

【问题讨论】:

当您的应用程序代码更改时,您是否要重新启动您的容器? 当我在主机 app.py 中进行代码更改时,我在容器 app.py 中得到了相同的更改。无需重新启动任何东西。但是当我从浏览器重新加载页面时,我看不到任何变化。 听起来像是您的应用程序响应新内容的问题,而不是 docker 问题。 也许吧。我试图在没有缓存的情况下运行该应用程序。 Flask 有一个禁用它的选项。但我仍然有问题。你看过我链接的文章吗? 尝试使用ENV FLASK_ENV=development在Dockerfile中设置FLASK_ENV。这将使应用程序在发生更改时重新加载。 【参考方案1】:

通过 cmets,我们得出结论,问题在于 Flask 如何处理实时/热重载,与 Docker 无关。

Flask 提供了FLASK_ENV 环境变量,可用于启用开发功能,例如调试器和自动重新加载器。要启用开发功能,您需要将其值设置为development

Docker 还提供了一种使用ENV 关键字设置环境变量的简洁方法。您所要做的就是在 Dockerfile 中添加以下行:

ENV FLASK_ENV=development

【讨论】:

太棒了!奇迹般有效。谢谢,伙计!

以上是关于更改后容器上的 Docker 卷更新,但主机中没有任何反应的主要内容,如果未能解决你的问题,请参考以下文章

在主机上更改挂载卷中的文件时,不会在 docker 容器中触发文件系统事件

在 CoreOS 主机之间移动 docker 数据卷容器

Docker容器数据卷挂载使用

Docker 数据管理

5docker容器数据卷

4.docker数据卷管理