当我构建我的dockerfile时,它会执行以下操作:
FROM debian:jessie
...
RUN echo "deb http://ppa.launchpad.net/ansible/ansible/ubuntu trusty main" > /etc/apt/sources.list \
&& apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 93C4A3FD7BB9C367 \
&& apt-get update \
&& apt-get install ansible
我得到:
The following packages have unmet dependencies:
ansible : Depends: python-jinja2 but it is not installable
Depends: python but it is not installable
Depends: python-yaml but it is not installable
Depends: python-paramiko but it is not installable
Depends: python-httplib2 but it is not installable
Depends: python-six but it is not installable
Depends: python-crypto (>= 2.6) but it is not installable
Depends: python-setuptools but it is not installable
Depends: sshpass but it is not installable
Depends: python-pkg-resources but it is not installable
安装 ansible 的过程中不应该已经安装这些软件包吗?我对此有点菜鸟,但据我所知,一个软件包可以列出其他软件包的依赖项,那么为什么这些软件包没有自动安装?Debian 至少也应该附带 python 吗?
我已将它们放入 apt-get 脚本中,并且它有效,但它不应该是自动的吗?如果 ppa 中的新 ansible 包需要更多包怎么办?这会破坏我的 dockerfile
答案1
您不需要/etc/apt/sources.list
使用覆盖文件,而是>
可以使用附加文本>>
。
因此它将类似于下面的内容。
RUN echo "deb http://ppa.launchpad.net/ansible/ansible/ubuntu trusty main" >> /etc/apt/sources.list \
&& apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 93C4A3FD7BB9C367 \
&& apt-get update \
&& apt-get install -y ansible
答案2
尝试将-f
选项添加到apt-get install
,以尝试修复损坏的依赖项。在运行之前,apt-get update
您可能还想运行apt-get clean
以清除本地 apt 存储库。这些对我使用 Ansible 配置程序的 Packer 构建有效。
您的代码将变成:
RUN echo "deb http://ppa.launchpad.net/ansible/ansible/ubuntu trusty main" > /etc/apt/sources.list \
&& apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 93C4A3FD7BB9C367 \
&& apt-get autoclean \
&& apt-get update \
&& apt-get install -f ansible
如需更多详细信息,我建议这个优秀的答案对于更广泛的问题,“添加 PPA 后,如何解决未满足的依赖关系?”
答案3
对于当前支持的 Ubuntu 版本您可以使用以下方式更新系统不支持来自的包裹这个不受信任的 PPA通过将 ppa:ansible/ansible 添加到系统的软件源中。
deb http://ppa.launchpad.net/ansible/ansible/ubuntu YOUR_UBUNTU_VERSION_HERE main
deb-src http://ppa.launchpad.net/ansible/ansible/ubuntu YOUR_UBUNTU_VERSION_HERE main
您可以使用以下命令安装 ansible。
$ sudo apt update
$ sudo apt install software-properties-common
$ sudo apt-add-repository --yes --update ppa:ansible/ansible
$ sudo apt install ansible
请注意,如果你使用的是 18.04 之前的 Ubuntu 版本没有-u
或--update
开关,apt-add-repository
因此,如果是这种情况,请将--update
开关从上面的第 3 行代码中去掉。
资料来源:
man apt-add-repository