gpt4 book ai didi

node.js - Docker 容器文件被主机卷共享覆盖

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

我正在用 python 构建一个具有 javascript 文件的应用程序。我想使用browserify ,所以我想安装一些 Node 模块,我可以通过 require 调用在我的 js 文件中使用它们。我只希望这些 Node 模块位于我的容器中,而不是主机中。这是我的 Node 特定容器的 Docker 设置。

### Dockerfile
FROM node:5.9.1
RUN npm install -g browserify
RUN mkdir /js_scripts
ADD package.json /js_scripts/
WORKDIR /js_scripts
RUN npm install # This installs required packages from package.json
RUN ls # lists the node_modules directory indicating successful install.

现在我想与此容器共享主机上的 js 文件,以便我可以在容器中运行 browserify main.js -o bundle.js 命令。这是我的 docker-compose.yml,它将 host_js_files 复制到我的 js_scripts 目录。

node:
build: .
volumes:
- ./host_js_files:/js_scripts

现在,当我在 js_scripts 目录中运行容器 docker-compose run node bashls 时,我只能看到来自主机卷,并且我的 node_modules 目录不可见。根据 docker 中卷的设置方式,这是有道理的。

但是我希望容器中包含这些 node_modules 才能成功运行 browserify (它会查找这些 Node 模块)。有没有一种好方法可以做到这一点,而无需在容器中全局安装 Node 模块或不必在主机中安装模块?

感谢您的投入。

最佳答案

容器应该是无状态的。如果破坏容器,则其中的所有数据都将被破坏。您可以将 node_modules 目录挂载为卷,以避免在创建新容器时一直下载所有依赖项。请参阅安装一次 browserify 的示例:

### docker-compose.yml
node:
image: node:5.9.1
working_dir: /js_scripts
command: npm install browserify
volumes:
- $PWD/host_js_files:/js_scripts

首先,您应该运行 docker-compose up 并等待所有软件包安装完毕。之后,您应该运行 browserify 命令:

docker-compose run node /js_scripts/node_modules/.bin/browserify /js_scripts/main.js -o /js_scripts/bundle.js

关于node.js - Docker 容器文件被主机卷共享覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36314419/

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