【问题标题】:Docker volume clears folder in container on windows 10Docker 卷在 Windows 10 上清除容器中的文件夹
【发布时间】:2020-04-04 05:52:53
【问题描述】:

我用 nodejs 服务器创建了一个简单的 docker。

FROM node:12.16.1-alpine
WORKDIR /usr/src

COPY ./app/package.json .
RUN yarn

COPY ./app ./app

这很好,服务正在运行。

现在我正在尝试使用 docker compose 运行带有卷的 docker 以进行本地开发:

version: "3.4"
services:
    web:
        image: my-node-app
        volumes:
            - ./app:/usr/src/app
        ports:
            - "8080:8080"
        command: ["yarn", "start"]        
        build:
            context: .
            dockerfile: ./app/Dockerfile

这是我在主机中的文件夹结构:

该服务在没有音量的情况下工作。当我添加卷时,/usr/src/app 是空的(即使它已满,如文件夹结构所示)。

检查 docker 容器,我得到以下挂载配置:

"Mounts": [
        {
            "Type": "bind",
            "Source": "/d/development/dockerNCo/app",
            "Destination": "/usr/src/app",
            "Mode": "rw",
            "RW": true,
            "Propagation": "rprivate"
        }
    ],

但是,通过 vscode 的 shell 浏览到该文件夹​​仍然显示为空。

此外,命令:docker volume ls 显示一个空列表。

我在 Windows 10 上运行 docker 18.09.3。

配置有问题吗?它应该如何工作?

【问题讨论】:

    标签: docker docker-compose docker-volume


    【解决方案1】:

    将卷添加到您的服务将删除所有文件 /usr/src/app 并从您的主机安装 ./app 的内容。这也意味着在docker镜像中运行yarn生成的所有文件都会丢失,因为它们只存在于docker镜像中。这是在 docker 中添加音量的预期行为,它不是错误。

            volumes:
                - ./app:/usr/src/app
    
    • 通常,对于非开发环境,您根本不需要这里的卷。
    • 如果您想查看主机上的文件,您需要从 docker-compose 运行 yarn 命令(您可以使用入口点)

    【讨论】:

    • 我实际上看到了节点模块,因为它们是在 /usr/src 文件夹中生成的。问题是 - 我看不到 /usr/src/app 文件夹中的文件,即使 ./app 主机中存在这些文件。
    • 这个/d/development/dockerNCo/app./app 的正确路径吗?
    • 是的。我认为问题源于Windows权限问题。配置看起来不错,我正在其他机器上使用它。我猜 docker 不能在 Windows 家庭版中完全运行 :(
    • 如果你在windows上运行这个,你需要添加正确的路径。这是描述如何执行此操作的链接adamtheautomator.com/docker-volumes-windows
    • 谢谢。我之前已经尝试过这篇文章中写的内容(我已经为这个问题苦苦挣扎了一天)。它不工作。问题是 - 源中的路径是正确的。这似乎是一个权限问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-01
    • 2016-08-28
    相关资源
    最近更新 更多