Docker不更新目录中的更改

时间:2018-10-01 10:24:13

标签: node.js linux docker ubuntu dockerfile

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

Dockerfile

FROM node:8

WORKDIR /home/test-ci-node
COPY . .
EXPOSE 8080
CMD [ "node", "server.js" ]

server.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");

然后我用命令启动了docker镜像

  

docker run -p 8080:8080 -d docker_img

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

  

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

然后我尝试重新启动容器,但未反映出更改, 我尝试了几种google方法,但结果相同。

要反映出更改,我必须重建图像。

因此有一种正确的方法来反映更改而无需重建图像。

2 个答案:

答案 0 :(得分:3)

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

COPY . .

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

但是并非每次运行容器或启动容器时都执行此副本,仅当您构建时才执行。

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

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

答案 1 :(得分:0)

使用自己的路径删除复制语句并通过下面的路径,ADD还支持全局变量 添加/ host / path / container / path