Docker卷 - Windows主机和Linux容器

3

我有一个非常简单的Dockerfile:

FROM node:current-alpine3.14 AS baseImage
WORKDIR /app
COPY package* .
RUN npm install
COPY . .
CMD ["npm", "run", "watch"]

然后我运行: docker build . -t myImage

接着是 docker run -p 8080:3000 -v /c/myFolder:/app myImage

所以基本上我想要在容器内的应用程序文件夹与我的主机上的 C:\myFolder 之间建立“共享”。

但它不起作用: 例如,如果我更新了 C:\myFolder\index.js 文件,则更改不会在容器中发生。

下面是docker inspect myContainer在 Mounts 部分返回的内容。 这是否与转义 / 路径格式有关?或者我在使用 volume 或 WORKDIR 时漏掉了一些基础知识?

Mounts : enter image description here Mounts 看起来认为 "Program Files/Git/app" 是目标 / 容器文件夹,但它应该简单地是 "/app"

Binds: enter image description here


你是对的 @rzlvmp。那是个打字错误。我已经编辑过了。 - LauDem
1
在Alpine中,你可以用sh替代bash。然后,在其中使用apk add nano来安装nano。有了它,编辑index.js并分享给我们,以检测变化。 - JRichardsz
Docker 的一个设计目标是,镜像包含应用程序的不可变副本,并且与主机上可能存在或不存在的任何应用程序副本分开。你可以在日常开发中不使用 Docker 而直接使用 Node 吗? - David Maze
@JRichardsz 尝试运行 exec 触发了一个奇怪的错误: OCI 运行时执行失败:执行失败:container_linux.go:380:启动容器进程导致:exec:"C:/Program Files/Git/usr/bin/sh":stat C:/Program Files/Git/usr/bin/sh:没有那个文件或目录:未知``` 为什么它要寻找 C:/Program Files/Git/usr/bin/sh? - LauDem
尝试运行此命令:docker run -it -v /c/myFolder:/app ubuntu 并验证此简单容器是否能够处理该卷。在 /c/myFolder 目录下创建一个文件,然后在容器内检查 /app 文件夹中是否存在这个新文件。 - JRichardsz
显示剩余6条评论
1个回答

2

执行命令:

docker run -p 8080:3000 -v /c/myFolder:/app myImage在Windows GitBash下运行的

使用CMD运行相同的命令解决了我的问题.

看起来GitBash将/app目标文件夹转换为\Program Files\Git\app


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接