我经历了为数不多的很好的 dockerizing Vue.js 教程之一,有一件事我不明白为什么是强制性的Dockerfile:
# add `/app/node_modules/.bin` to $PATH
ENV PATH /app/node_modules/.bin:$PATH
COPY package.json /usr/src/app/package.json #not sure though how it relates to PATH...
Run Code Online (Sandbox Code Playgroud)
我们将所有 Node.js 二进制文件暴露给我们的 PATH 环境变量,并将我们的项目 package.json 复制到 app 目录。复制 JSON 文件而不是整个工作目录允许我们利用 Docker 的缓存层。
尽管如此,它并没有让我变得更聪明。谁能用简单的英语解释一下?
我认为这只是防止 Docker 无法找到正确的可执行文件(或根本没有任何可执行文件)的错误的简单方法。除了在图像中添加另一层之外,据我所知,将该行添加到您的Dockerfile.
添加node_modules/bin到PATH环境变量可确保可以找到在npm build或进程期间创建的可执行文件。yarn build您还可以将COPY本地构建的node_modules文件夹添加到映像中,但建议将其构建在 Docker 容器内,以确保所有二进制文件都适应容器中运行的底层操作系统。最佳实践是使用多阶段构建。
node_modules/bin此外,在环境变量的开头添加PATH可以确保node_modules使用这些可执行文件(来自文件夹),而不是也可能安装在 Docker 映像内的系统上的任何其他可执行文件。
简短回答:通常不会。它应该是可选的。
长答案:将 设定为发出的 或 命令所在的路径应该WORKDIR足以找到正确的二进制文件,从而成功执行。但例如,我遇到了 Docker 无法找到文件的情况(我在 VSCode 中进行了相当复杂的设置)。添加该行解决了我的问题。node_modulesRUNCMDENTRYPOINTDockerfiledevcontainerENV PATH /app/node_modules/.bin:$PATH
因此,如果您想提高 Docker 设置的稳定性以确保一切按预期工作,只需添加该行即可。
所以我认为这一行的好处是将Docker容器中的node_modules路径添加到PATH相关容器上的s列表中。如果你使用的是 Mac(或者我认为是 Linux)并运行:
$ echo $PATH
Run Code Online (Sandbox Code Playgroud)
您应该看到用于从终端运行全局命令的路径列表gulp,即husky、yarn等。
上面的命令会将 node_modules 路径添加到 docker 容器中的 PATH 列表中,以便这些命令(如果需要)可以在它们将工作的容器内全局运行。
| 归档时间: |
|
| 查看次数: |
2174 次 |
| 最近记录: |