如果没有找到具有该名称的本地图像,我如何告诉 docker 从本地图像创建容器,而不查看 docker 集线器?

How can I tell docker to create a container from a local image, without looking at the docker hub if no local image is found with that name?

我正在尝试解决我认为的安全问题。如果我正在做一个我称之为“示例”的项目,我可以使用 docker build -t example . 从它构建一个 docker 图像,然后使用 docker run example 运行 它。这将正常工作,但如果我忘记先构建,或者如果我 docker rmi 图像而不重建,那么 docker 将查询 docker hub,并且 运行 该图像代替.

我相信 docker 图像集线器我已经知道(例如,我很乐意 运行 docker run nginxdocker run postgres),但是如果我忘记构建本地 docker 图像,我担心会意外 运行ning 任意远程图像。

我知道我可以将我的本地图像命名为一些深奥的东西,这样就不太可能发生碰撞,但这感觉就像默默无闻的安全。

使用您控制的注册表或存储库命名您的图像。换句话说,不要 运行:

docker build -t example .

因为它会扩展到您无法控制的 Docker 官方图片库(又名 docker.io/library/)。但是您可以在 Hub 上创建自己的用户帐户,这样您就可以:

docker build -t ${your_hub_id}/example .

这样任何本地不存在的图像都会尝试从 Hub 上的命名空间中提取。

您不必为您的图像命名一些深奥的东西。

使用命名空间

只需在 docker 集线器上注册一个命名空间,然后在您的图像名称中使用它。例如,我在 Docker Hub 上 larsks。除了我,没有人可以在 larsks 命名空间中创建图像,因此如果我将本地图像命名为 larsks/example,我知道除非我将它放在那里,否则它永远不会在 Docker Hub 上解析。

使用虚假的注册表名称

也许您不想在 Docker Hub 上注册。

回想一下,图像名称的完全限定形式是 registry/namespace/repository:tag。如果您使用不存在的注册表命名本地图像,Docker 将无法从任何地方提取它们。例如,如果我命名某物 dne/larsks/exampledne 就像“不存在”一样,但任何有效但不是有效主机名的东西),Docker 将永远无法提取此图像.