【发布时间】:2022-07-02 11:27:27
【问题描述】:
我想将本地机器上的项目设置为 docker 容器的只读,如下所示:
docker run -d \
-p 3000:3000 \
-v $PWD:/app:ro \
-v /app/node_modules \
--name $1 \
$(docker images | awk '{print $1}' | awk 'NR==2')
而且我总是得到这个错误,只有在我将 :ro 位作为可选参数添加到卷之后:
docker: Error response from daemon: failed to create shim: OCI runtime create failed: container_linux.go:380: starting container process caused: process_linux.go:545: container init caused: rootfs_linux.go:75: mounting "/var/lib/docker/volumes/6ffd471c1bc7edc141b6569b4d8e16829c7c7ae1838e4cc924727b0a854de143/_data" to rootfs at "/app/node_modules" caused: mkdir /var/lib/docker/overlay2/60b790308084302171b1b339ee242862651d7d96ecf21fb9b0a8867326ca83b3/merged/app/node_modules: read-only file system: unknown.
我正在关注这个tutorial,我在windows 11 上使用docker-desktop 和WSL2。
【问题讨论】:
-
你不应该需要任何一个
-v选项;应用程序代码通常应该内置到图像中。但是,如果您将图像的/app替换为只读安装目录,则错误意味着它所说的内容,那么您无法在其上安装/app/node_modules。 -
确保
node_modules存在于您主机上的$PWD中。 -
我将 node_modules 添加回我的本地主机并使用 -v /node_modules 删除了该行,它可以工作。
-
我将 node_modules 添加回我的本地主机并删除了带有 -v /node_modules 的行,它可以工作。教程中的人提出的论点是关于我们从 localhost 中删除 node_modules 的事实,因为我们现在正在 docker 容器上进行开发,并且第一个绑定卷 -v $PWD:/app 将我们的本地文件夹与 /app 同步在容器上,因此也删除了 /node_modules。所以他添加了第二个匿名卷 -v /app/node_modules 以防止从容器中删除 node_modules。
标签: docker wsl-2 docker-desktop persistent-volumes