Docker 不更新目录中的更改

Roh*_*ngh 12 linux ubuntu node.js docker dockerfile

我是 docker 新手,我正在尝试测试节点服务器

文件

FROM node:8

WORKDIR /home/test-ci-node
COPY . .
EXPOSE 8080
CMD [ "node", "server.js" ]
Run Code Online (Sandbox Code Playgroud)

服务器.js

var http = require('http');

//create a server object:
http.createServer(function (req, res) {
    console.log("got req");
    res.write('Hello World'); //write a response to the client
    res.end(); //end the response
}).listen(8080); //the server object listens on port 8080

console.log("listining at 8080");
Run Code Online (Sandbox Code Playgroud)

我用命令启动了我的 docker 镜像

码头工人运行 -p 8080:8080 -d docker_img

现在在server.js 中,我将响应更改为

res.write('Hello World 改变了!');

然后我尝试重新启动容器但没有反映更改,我尝试了一些谷歌方法但结果相同。

为了反映变化,我不得不重建图像。

那么有没有正确的方法来反映更改而不重建图像。

Art*_*dor 10

在您的 docker 文件中,您正在使用

COPY . .
Run Code Online (Sandbox Code Playgroud)

这意味着,当您构建 docker 时,您将当前文件夹复制到容器的默认文件夹中。可能 /root

但是这个副本不会在你每次运行容器或启动它时执行,只有在你构建时才会执行。

为了能够在不重新构建的情况下实时查看您所做的每一个更改,您需要创建一个卷,这将是您的主机和容器之间的链接。主机或容器上更改的每个内容都将共享给另一个。

请注意,在您的 dockerfile 中,声明 VOLUME 实际上不会更改任何内容,它只是一个信息。要实际制作卷,您需要在 docker run 命令行中添加 -v /host/path:/container/path 。