如何在运行Docker容器时覆盖镜像内已内置的文件?
问题解答
失效原因
COPY指令属于镜像构建阶段的执行逻辑,Dockerfile中定义的ARG参数也仅在构建过程中生效。你执行docker run时传入的--env是容器运行时的环境变量,不会修改构建阶段已经完成的文件复制结果,所以容器内始终是构建时默认拷贝的sum.js和sum.test.js。
可行实现方案
方案1:构建时传参将目标文件打包进镜像
如果需要把指定文件固化到镜像内,构建镜像时传入ARG参数即可,构建命令如下:
docker build --build-arg JS_FILE="./Scripts/updated_sum.js" --build-arg JS_TEST_FILE="./Test/updated_sum.test.js" -t <镜像名称> .
构建完成后直接启动容器即可,不需要额外传环境变量,镜像内已内置你指定的两个更新后的文件。
方案2:运行时挂载宿主机文件动态加载
如果是开发调试场景,不想每次修改文件都重新构建镜像,可以直接将本地文件挂载到容器对应路径,运行命令如下:
docker run -v $(pwd)/Scripts/updated_sum.js:/app/updated_sum.js -v $(pwd)/Test/updated_sum.test.js:/app/updated_sum.test.js -it <镜像名称>
该方案修改本地文件后重启容器即可生效,无需重新构建镜像。
内容的提问来源于stack exchange,提问作者change198
相关产品推荐
相关产品推荐

