我是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方法,但结果相同。
要反映出更改,我必须重建图像。
因此有一种正确的方法来反映更改而无需重建图像。
答案 0 :(得分:3)
在您的docker文件中,您正在使用
COPY . .
这意味着,在构建docker时,会将当前文件夹复制到容器的默认文件夹。可能是/ root
但是并非每次运行容器或启动容器时都执行此副本,仅当您构建时才执行。
要能够实时查看您所做的每个更改而无需重新构建,您需要创建一个卷,这将是您的主机和容器之间的链接。主机或容器上更改的每个内容都将共享给另一个。
请注意,在您的dockerfile中,声明VOLUME实际上并不会更改任何内容,而只是一个信息。要实际创建卷,您需要在docker run命令行中添加-v / host / path:/ container / path。
答案 1 :(得分:0)
使用自己的路径删除复制语句并通过下面的路径,ADD还支持全局变量 添加/ host / path / container / path