1

我想用 ansible-bender 构建一个 docker 映像,这是 ansible v2.10 的推荐方式,不推荐使用 ansible-container。

所以...起初我认为我只是使用 debian:buster-slim 图像作为 docker hub 的基础

---
- name: whatever
  hosts: all
  vars:
    ansible_bender:
      base_image: debian:buster-slim
  tasks:
  - name: doesn't matter
...

没关系,因为这个镜像不包含python安装

21:28:33.284 buildah_builder.py ERROR  couldn't locate python interpreter, tried these paths: ('/usr/bin/python3', '/usr/local/bin/python3', '/usr/bin/python3.7', '/usr/bin/python37', '/usr/bin/python3.6', '/usr/bin/python36', '/usr/bin/python2', '/usr/local/bin/python2', '/usr/bin/python', '/usr/local/bin/python', '/usr/libexec/platform-python')

好的,还有另一个图像,python 在 docker hub 上也有一个 repo,还有一个基于 buster slim 的图像(python:3.8-slim-buster):

---
- name: whatever
  hosts: all
  vars:
    ansible_bender:
      base_image: python:3.8-slim-buster
  tasks:
  - name: some task
    raw: apt-get update

我想太好了,现在我可以开始构建我想要的图像了。所以我切换了任务

---
- name: whatever
  hosts: all
  vars:
    ansible_bender:
      base_image: python:3.8-slim-buster
  tasks:
  - name: install some packages
    apt: 
      name: libssl-dev ca-certificates
      update_cache: yes

好的, apt 模块上的文档确实提到了它,这是一种期待:

FAILED! => {"changed": false, "msg": "Could not import python modules: apt, apt_pkg. Please install python3-apt package."}

但是现在,这个图像中的 python 安装不是来自发行版的,所以安装 python3-apt 将无济于事,甚至不能导入:

PYTHONPATH=/usr/lib/python3/dist-packages python
Python 3.8.6 (default, Nov 18 2020, 14:00:57) 
[GCC 8.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import apt;
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python3/dist-packages/apt/__init__.py", line 23, in <module>
    import apt_pkg
ModuleNotFoundError: No module named 'apt_pkg'

并且没有 python 模块:有人可以通过例如 pip 安装的 apt 或 apt_pkg,而且我对 python 安装并不感兴趣,我想构建一个 docker 映像。当然,我想用 ansible 构建它,并且是用 python 编写的,但是......有那么难吗!?我的意思是,我尝试安装基于发行版的 python 3.7 和 python3-apt 包,但由于 PATH,ansible 默认情况下仍在查看 /usr/local/bin 的安装,并且 ;-) 不要尝试在运行时切换 PATH剧本。

我是不是想错了,我应该使用不同的基本映像(debian 是必需的) - 任何在相同问题中运行的人都有一个想法!?

是的,我知道使用基于 distri 的 python 安装和所需模块以另一种方式扩展 debian:buster-slim 映像的可能性,将其推送到注册表并将其用作基本映像。但我很懒,这是一个很长的过程中的另一个步骤,涉及 gitlab 管道、rundeck 上的 api 请求、rundeck 中的另一个 ansible playbook 等等......

4

0 回答 0