Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Docker基本映像状态复制_Docker - Fatal编程技术网

Docker基本映像状态复制

Docker基本映像状态复制,docker,Docker,我有一个DockerFile,它是从Ubuntu的基本映像构建的。我还有以下命令指示容器执行更新: RUN apt-get update 如果我在不同的时间点运行我的容器,我不能保证我的Ubuntu基本映像和每次使用apt get update命令更新的相应包是相同的。如何保证它始终保持不变?该命令仅在生成映像时执行。 如果您想在每次启动容器时运行一个命令,则应该考虑使用 CMD< /COM>语句,而不是运行一个。 < P>您应该在自己的基础映像中运行RunAPT get更新,然后用已知的标记

我有一个DockerFile,它是从Ubuntu的基本映像构建的。我还有以下命令指示容器执行更新:

RUN apt-get update

如果我在不同的时间点运行我的容器,我不能保证我的Ubuntu基本映像和每次使用apt get update命令更新的相应包是相同的。如何保证它始终保持不变?

该命令仅在生成映像时执行。
如果您想在每次启动容器时运行一个命令,则应该考虑使用<代码> CMD< /COM>语句,而不是<代码>运行<代码>一个。

< P>您应该在自己的基础映像中运行RunAPT get更新,然后用已知的标记(例如,构建日期)发布/部署到DoCKHub。然后在随后的图像中,你可以说下面这行。这样,即使您对Dockerfile进行了大量更改,您也永远不会从下面更新依赖项

FROM me/ubuntu:18_11_2014 

首先,需要注意的是,只有运行
docker build
,图像才会更新,而不是通过
docker run
。即使如此,Docker默认情况下也会缓存层,
apt get update
行只有在上面的内容发生更改或您明确关闭缓存时才会重新运行


几乎不可能确保构建始终生成完全相同的映像,这是一个已知的问题。您最好将版本号传递给apt get,例如,
apt get install-y nautilus=2.2.4-1
,这对您来说应该足够好了。但是,请记住,由安装的软件拉入的任何依赖项都可能已更改(依赖项通常被指定为>=特定版本),这意味着映像仍有可能更改。另外,请记住,在某些时候,旧的软件包只会从Debian repos中删除。

您的容器映像只有在您构建它们或提交更改时才会更改。您能否澄清一下,在您的示例中,
with
应该是
from
吗?您是否希望事情每天都发生变化(例如,获取安全修复)还是长期保持不变(例如,避免意外的不兼容)?