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

标签 docker security dockerfile docker-registry

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

我信任 docker hub 来获取我已经知道的图像(例如,我很高兴运行 docker run nginx 或 docker run postgres ),但是如果我忘记构建本地 Docker 镜像,我担心会意外运行任意远程镜像。

我知道我可以将本地镜像命名为深奥的名称,这样就不太可能发生冲突,但这感觉就像是默默无闻的安全感。

最佳答案

您不必将图像命名为深奥的名称。

使用命名空间

只需在 docker hub 上注册一个命名空间,然后在镜像名称中使用它即可。例如,我是 Docker Hub 上的 larsks。除了我之外没有人可以在 larsks 命名空间中创建镜像,因此如果我将本地镜像命名为 larsks/example ,我知道这永远不会在 Docker Hub 上解决,除非我将它就在那里。

使用虚假的注册表名称

也许您不想注册 Docker Hub。

回想一下,镜像名称的完全限定形式是 registry/namespace/repository:tag。如果您使用不存在的注册表命名本地镜像,Docker 将无法从任何地方提取它们。例如,如果我命名一些 dne/larsks/example (dne 如“不存在”,但任何不是有效主机名的东西都可以工作),Docker 将永远不会能够拉出这个图像。

关于docker - 如果没有找到具有该名称的本地镜像,如何告诉 docker 从本地镜像创建容器,而不查看 docker hub?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70733035/

相关文章:

java - 是否可以在 Servlet 中使用 char[] 而不是字符串来存储密码?

reactjs - 如何在React js应用程序的响应中添加http标题

docker - 'DEBIAN_FRONTEND=noninteractive' 无法使用 apt-get 在 shell 脚本内工作

mysql - 为什么我的 docker-entrypoint-initdb.d 脚本(在 docker-compose.yml 中指定)没有被执行来初始化一个新的 MySQL 实例?

linux - 在 Linux 上的 docker 中重叠绑定(bind)挂载和权限

sql-server - 禁用 SA,创建新登录,将数据库角色成员更改为数据库所有者

Docker 多阶段构建和 Codeship 运行容器

security - 如果允许 unsafe-inline,CSP 会保护我们什么

docker - 带有Dockerfile项目的Dokku多进程(容器)

c# - 如何使用Docker和Kaniko减少.NET Core应用程序的构建时间?