【问题标题】:Specific file in bind-mount directory does not update in Docker container when editing on host?在主机上编辑时,绑定挂载目录中的特定文件不会在 Docker 容器中更新?
【发布时间】:2022-01-23 03:10:39
【问题描述】:

我正在尝试使用 Docker Compose 在本地开发一个项目,并且为了防止在每次更新时重新构建我的映像,我添加了一个 bind-mount,它将我的 src 目录映射到我在 Docker 中的 WORDIR。然后,在我的本地机器上所做的所有更改都会反映在我的 Docker 容器中……除了一个文件。出于某种原因,我的项目中有一个文件,当我更改其内容时,即使与此文件相邻的其他文件确实检测到文件更改,更改也不会反映在 Docker 容器中。这使我相信该目录已正确映射,但文件本身存在其他问题?

docker-compose.yaml

graphql:
  build:
    context: .
    dockerfile: ./app/graphql/src/Dockerfile
    target: development
  volumes:
    - ./app/graphql/src:/workspace
    - /workspace/node_modules/

Dockerfile

# ------------> Base Image
FROM node:14 AS base

WORKDIR /workspace

COPY ./app/graphql/src .

# ------------> Development Image
FROM base AS development

CMD ["npm", "run", "dev"]

我还没有弄清楚如何显示目录结构,但我正在修改的文件位于:

/app/graphql/src/api/graphql

文件 a.ts 检测到更改并反映在 Docker 容器中,但 b.ts 没有。我读到了 Docker 如何依赖文件的 inode 来匹配是否绑定挂载特定文件。我正在安装一个目录,但为了进行完整性检查,我运行了:

ls -i

在主机和容器中,并确认 inode 匹配。

我有两台 M1 Mac 电脑,我确认这是两台机器之间的问题。

还有什么其他想法可以调试这个问题吗?我唯一的另一个想法是我达到了可以跟踪的最大文件数,但这就是我删除node_modules 的原因。任何帮助都会非常有帮助!


编辑:我创建了一个新文件 c.ts 并复制了 b.ts 的内容(主机和容器之间没有更改的文件)......并且 c.ts 正确检测到更改!有没有办法检查为什么某个文件没有广播更改?这太奇怪了。

【问题讨论】:

  • 一些热重载工具不会重载文件,除非它在某处被使用。 b.ts 是否被导入到某个地方?
  • @NickODell 嘿!是的,我不确定您是否在底部看到了我的编辑,但是添加c.ts 并从b.ts 复制代码(因此它执行相同)会导致c.ts 的热重载。我必须运行docker compose down,删除b.ts 并将b.ts 重新添加到我的目录,然后运行docker compose up,现在它可以工作了。是否有特定的文件权限或影响主机更改容器中文件的东西?我仍然可以在我的另一台计算机上调试它
  • WRT 权限:如果您在权限字段中输入ls -l b.ts,在与用户权限对应的前三个字符中,您是否有一个“r”,表示读取权限?
  • 我看到-rw-r--r-- 我认为这是我们想要的,对吧?该目录中的所有其他文件具有相同的权限,并且通过热重载正确检测到

标签: docker docker-compose dockerfile


【解决方案1】:

您应该从 Dockerfile 中删除 COPY ./app/graphql/src . 指令,因为此文件夹将作为卷安装到容器中。

【讨论】:

  • 我认为这不会导致提问者看到的行为。在现有文件上绑定安装会影响旧文件:docs.docker.com/storage/bind-mounts/… 不过,我同意这一步是不需要的。
  • 感谢您的建议,从我的Dockerfile 中删除COPY 只会在运行docker compose up 后导致EN0ENT,因为它找不到我的任何文件:(
猜你喜欢
  • 2023-03-20
  • 1970-01-01
  • 2014-06-19
  • 2020-03-16
  • 2019-10-08
  • 1970-01-01
  • 1970-01-01
  • 2022-11-03
  • 1970-01-01
相关资源
最近更新 更多