gpt4 book ai didi

node.js - docker中具有只读源文件的可写node_modules

转载 作者:太空宇宙 更新时间:2023-11-03 23:24:53 25 4
gpt4 key购买 nike

我的webapp/Dockerfile看起来像这样:

FROM project_base-container

EXPOSE 9100

# ...

# Using copy instead of mount, since we need to write in sub-directories like node_modules etc.
COPY . /usr/src/app/webapp

CMD ["bash", "webapp/scripts/build_and_run.sh", "setup_deps_and_run_app"]

我希望允许应用程序能够读取源代码并写入 node_modules 等子文件夹,但我不希望这些更改出现在我的本地计算机中。因此,我有两个选择:

  1. node install 中更改 --prefix='/tmp' 并将 src 挂载为 ro
  2. 复制COPY src,然后容器就可以写入任何它想要的地方。

解决方案 1 造成了严重破坏,因为现在我必须将 package.json、index.html 等所有文件复制/链接到前缀位置。解决方案 2 就是我上面所做的。

当我第一次使用 COPY 时一切都很好。但现在的问题是,源代码更改后,我每次都想更新镜像中的源代码:

sudo docker-compose down && sudo docker-compose up --build -d

但是 COPY 命令被 docker 缓存,即使文件更改也不会更新。

<小时/>

TL;DR:我有一个 src 文件夹“webapp”,我想以只读方式从主机挂载该文件夹,但我的应用程序想要写入子文件夹“webapp/node_modules”。

最佳答案

要在只读挂载内创建可写挂载,您需要确保只读目录具有挂载点(文件夹),即使它们是空的

要创建空挂载点并提交它们,请参阅 this answer .

对于运行 Node ,您需要以下4个可写文件夹:

$ mkdir webapp/frontend/node_modules webapp/frontend/build webapp/frontend/.config webapp/frontend/.npm

$ cat > webapp/frontend/node_modules/.gitignore
# Ignore everything in this directory
*
# Except this file
!.gitignore

$ git add -f webapp/frontend/node_modules/.gitignore

$ cat docker-compose.yml # Filtered output below
version: "2"
services:
webapp:
build: ./webapp
expose:
- "9900"
# Named volumes, defined below.
volumes:
- ./webapp:/usr/src/app/webapp:ro
- webapp_config:/usr/src/app/webapp/frontend/.config:rw
- webapp_npm:/usr/src/app/webapp/frontend/.npm:rw
- webapp_node_modules:/usr/src/app/webapp/frontend/node_modules:rw
- webapp_build:/usr/src/app/webapp/frontend/build:rw
- ./config.ini:/usr/src/app/config.ini:ro
# Named volumes. These will stay in the host, but not in the current directory.
volumes:
webapp_node_modules:
webapp_build:
webapp_config:
webapp_npm:
<小时/>

关于node.js - docker中具有只读源文件的可写node_modules,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45591252/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com