在没有 docker 注册表的情况下使用 ansible-container 部署 docker 图像

deploy docker image with ansible-container without a docker registy

我正在尝试使用 ansible-container 来创建和部署我的 docker 应用程序,但我无法让它工作。

我有一个可以通过ansible配置的远程服务器。在我的本地机器上,我正在使用 ansible-container 构建一个工作正常的 docker 图像。在 运行 ansible-container build 之后,我的本地计算机上有 docker 图像。 但是,我没有下一步工作。我的目标是将 docker 图像从我的本地计算机推送到远程服务器,然后在远程服务器上基于此图像创建并启动一个 docker 容器。

我没有使用 docker 注册表。因此,我对 ansible-container deploy 命令使用 --local-images 选项,以防止将图像推送到注册表(至少这是我从 docs 中了解到的)。此命令成功创建了一个 ansible playbook,但是当我执行此 playbook 时,它仍然尝试从 docker.io 注册表中提取图像,当然无法在那里找到它。

我认为缺少的步骤是将本地 docker 图像推送到远程服务器,但我在这个用例的 ansible-container 文档中找不到任何提示。我也看过 ansible docker_image module 但据我了解,这也以使用注册表为中心。

如何使用 ansible 将 docker 图像部署到远程服务器?

如果您没有docker注册表,您需要做的是将图像保存到tar球中,然后将其上传到机器,然后导入tar球变回 docker 图像。

在您的本地计算机上将图像保存到 tar球中:

docker save --output image.tar <image>

将 tar 上传到 target 机器后,您可以使用以下方法将其导回 docker 图像:

docker import image.tar <image-name>

从那时起,映像将在机器上并且 docker 不会尝试从注册表中提取。