Docker中React与Express同WORKDIR的package.json是否会被覆盖?
关于Docker客户端/服务端镜像WORKDIR的疑问解答
完全不会出现package.json被互相覆盖的情况,核心原因是Docker的镜像和容器文件系统是完全隔离的:
- 你为客户端、服务端编写的是两个独立的Dockerfile,会分别构建成不同的镜像。每个镜像在构建时,
WORKDIR /app只是在当前镜像的专属文件系统内创建或切换到该目录,拷贝的也是对应项目(客户端或服务端)的package.json到自己镜像的/app目录下,两个镜像的文件系统没有任何交集。 - 启动容器时,每个容器都拥有独立的文件系统空间,各自/app目录里的文件完全独立,不存在互相覆盖的可能。
- 你为客户端、服务端编写的是两个独立的Dockerfile,会分别构建成不同的镜像。每个镜像在构建时,
教程里普遍用
WORKDIR /app只是行业约定:- 这是Docker生态里通用的应用代码存放目录命名习惯,类似本地项目放在
~/projects下,和“冲突”完全无关——毕竟每个镜像/容器的文件系统都是隔离的。
- 这是Docker生态里通用的应用代码存放目录命名习惯,类似本地项目放在
举个直白的例子:
- 服务端Dockerfile放在
server文件夹下,构建时会把server目录下的package.json拷贝到服务端镜像的/app目录; - 客户端Dockerfile放在
client文件夹下,构建时会把client目录下的package.json拷贝到客户端镜像的/app目录;
这两个操作完全在各自的构建环境里完成,互不干扰。
内容的提问来源于stack exchange,提问作者me-me
相关产品推荐
相关产品推荐

