运行 Docker 从 Docker 文件检查
Run Docker Inspect from Dockerfile
我正在创建一个简单的 HTML 并希望它显示构建 docker 容器的时间。我想使用 Docker inspect,因为 docker inspect 是来自 docker 容器内部的 运行 ] 文件?
我的 html 文件是
<!DOCTYPE html>
<html>
<body>
<h1>Welcome to Nginx Web Server</h1>
<p>Date/Time: <span id="datetime"></span></p>
<script>
var dt = new Date();
document.getElementById("datetime").innerHTML = (("0"+dt.getDate()).slice(-2)) +"."+ (("0"+(dt.getMonth()+1)).slice(-2)) +"."+ (dt.getFullYear()) +" "+ (("0"+dt.getHours()).slice(-2)) +":"+ (("0"+dt.getMinutes()).slice(-2));
</script>
<p>This server is running through Docker container deployed:</p>
</body>
</html>
我的 DOCKER 文件是
FROM nginx
COPY index.html /usr/share/nginx/html
EXPOSE 8080
RUN docker inspect -f '{{ .Created }}'
我不确定我是否理解您要测量的内容。但是,如果 docker 未安装 在您的映像 中,则您无法调用它。
可以使用某种形式的 docker-in-docker(例如 docker 图像)在容器中 运行 docker inspect
。但是,我不认为这会做你想做的事 - 你无法获得尚未实际创建的图像的创建日期。
您可以改为使用 date
命令获取当前时间的时间戳:
$ date
Tue Mar 1 23:43:44 -03 2022
但是,我建议不要这样做。它会与 docker 的缓存进行奇怪的交互——该日期将被缓存用于后续构建,除非您更改 index.html.
Docker Inspect
可能会获得构建时间,但它
- 需要调用
docker
命令,引入过多的依赖性,因此 'heavy' 无法完成如此琐碎的任务。
- 只能运行在镜像构建后。
更简单轻便的方法是在构建docker时替换html文件。
- 在 html 文件中定义要替换的占位符(要替换的唯一常量字符串)。
<!DOCTYPE html>
<html>
<body>
<h1>Welcome to Nginx Web Server</h1>
<p>Date/Time: <span id="datetime"></span></p>
<script>
var dt = new Date();
document.getElementById("datetime").innerHTML = (("0"+dt.getDate()).slice(-2)) +"."+ (("0"+(dt.getMonth()+1)).slice(-2)) +"."+ (dt.getFullYear()) +" "+ (("0"+dt.getHours()).slice(-2)) +":"+ (("0"+dt.getMinutes()).slice(-2));
</script>
<p>This server is running through Docker container deployed:</p>
<p>DATEPLACEHOLDER</p>
</body>
</html>
- 用
date
变量替换占位符。
FROM nginx
COPY index.html /usr/share/nginx/html
EXPOSE 8080
RUN export NOW=$(date); sed -i "s/DATEPLACEHOLDER/$(NOW)/g" "/usr/share/nginx/html"
或者您可以使用RUN echo date > /tmp/date.txt
,并在docker启动时将值代入html(可以在dockerfile
的CMD
部分完成) .
但是,这种方法也有其缺点。即使 dockerfile
中没有任何更改,每次构建都会构建一个新图像。并且如果替换后还有其他重要步骤,docker构建缓存无效,导致构建时间和推送时间变长。
我正在创建一个简单的 HTML 并希望它显示构建 docker 容器的时间。我想使用 Docker inspect,因为 docker inspect 是来自 docker 容器内部的 运行 ] 文件?
我的 html 文件是
<!DOCTYPE html>
<html>
<body>
<h1>Welcome to Nginx Web Server</h1>
<p>Date/Time: <span id="datetime"></span></p>
<script>
var dt = new Date();
document.getElementById("datetime").innerHTML = (("0"+dt.getDate()).slice(-2)) +"."+ (("0"+(dt.getMonth()+1)).slice(-2)) +"."+ (dt.getFullYear()) +" "+ (("0"+dt.getHours()).slice(-2)) +":"+ (("0"+dt.getMinutes()).slice(-2));
</script>
<p>This server is running through Docker container deployed:</p>
</body>
</html>
我的 DOCKER 文件是
FROM nginx
COPY index.html /usr/share/nginx/html
EXPOSE 8080
RUN docker inspect -f '{{ .Created }}'
我不确定我是否理解您要测量的内容。但是,如果 docker 未安装 在您的映像 中,则您无法调用它。
可以使用某种形式的 docker-in-docker(例如 docker 图像)在容器中 运行 docker inspect
。但是,我不认为这会做你想做的事 - 你无法获得尚未实际创建的图像的创建日期。
您可以改为使用 date
命令获取当前时间的时间戳:
$ date
Tue Mar 1 23:43:44 -03 2022
但是,我建议不要这样做。它会与 docker 的缓存进行奇怪的交互——该日期将被缓存用于后续构建,除非您更改 index.html.
Docker Inspect
可能会获得构建时间,但它
- 需要调用
docker
命令,引入过多的依赖性,因此 'heavy' 无法完成如此琐碎的任务。 - 只能运行在镜像构建后。
更简单轻便的方法是在构建docker时替换html文件。
- 在 html 文件中定义要替换的占位符(要替换的唯一常量字符串)。
<!DOCTYPE html>
<html>
<body>
<h1>Welcome to Nginx Web Server</h1>
<p>Date/Time: <span id="datetime"></span></p>
<script>
var dt = new Date();
document.getElementById("datetime").innerHTML = (("0"+dt.getDate()).slice(-2)) +"."+ (("0"+(dt.getMonth()+1)).slice(-2)) +"."+ (dt.getFullYear()) +" "+ (("0"+dt.getHours()).slice(-2)) +":"+ (("0"+dt.getMinutes()).slice(-2));
</script>
<p>This server is running through Docker container deployed:</p>
<p>DATEPLACEHOLDER</p>
</body>
</html>
- 用
date
变量替换占位符。
FROM nginx
COPY index.html /usr/share/nginx/html
EXPOSE 8080
RUN export NOW=$(date); sed -i "s/DATEPLACEHOLDER/$(NOW)/g" "/usr/share/nginx/html"
或者您可以使用RUN echo date > /tmp/date.txt
,并在docker启动时将值代入html(可以在dockerfile
的CMD
部分完成) .
但是,这种方法也有其缺点。即使 dockerfile
中没有任何更改,每次构建都会构建一个新图像。并且如果替换后还有其他重要步骤,docker构建缓存无效,导致构建时间和推送时间变长。