【问题标题】:Docker: Unable to correct problems, you have held broken packagesDocker:无法纠正问题,您持有损坏的包
【发布时间】:2017-06-17 10:26:50
【问题描述】:

我有 Dockerfile,我用过很多次都没有问题。现在我需要向它添加一些包(ssmtp 和 sendmail),当我添加它们时,构建失败:

Sending build context to Docker daemon 645.3 MB
Sending build context to Docker daemon 
Step 0 : FROM debian:jessie
 ---> 736e5442e772
Step 1 : MAINTAINER Larry Martell <larry.martell@foo.com>
 ---> Using cache
 ---> bd272aa26940
Step 2 : ENV HOME /opt/django/CAPgraph/
 ---> Using cache
 ---> 1c540ed91808
Step 3 : RUN echo "deb http://http.debian.net/debian jessie-backports main" >> /etc/apt/sources.list
 ---> Using cache
 ---> 8788d48e625d
Step 4 : RUN (apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y build-essential git python python-dev python-setuptools nginx sqlite3 supervisor mysql-server libmysqlclient-dev vim cron unzip software-properties-common python-software-properties openjdk-8-jre xvfb wkhtmltopdf ssmtp sendmail)
 ---> Running in 8986bca93fdb
Get:1 http://security.debian.org jessie/updates InRelease [63.1 kB]
Get:2 http://security.debian.org jessie/updates/main amd64 Packages [436 kB]
Get:3 http://http.debian.net jessie-backports InRelease [166 kB]
Get:4 http://httpredir.debian.org jessie-updates InRelease [145 kB]
Get:5 http://http.debian.net jessie-backports/main amd64 Packages [1031 kB]
Get:6 http://httpredir.debian.org jessie-updates/main amd64 Packages [17.6 kB]
Ign http://httpredir.debian.org jessie InRelease
Get:7 http://httpredir.debian.org jessie Release.gpg [2373 B]
Get:8 http://httpredir.debian.org jessie Release [148 kB]
Get:9 http://httpredir.debian.org jessie/main amd64 Packages [9049 kB]
Fetched 11.1 MB in 9s (1211 kB/s)
Reading package lists...
Reading package lists...
Building dependency tree...
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:

The following packages have unmet dependencies:
 sendmail : Depends: sendmail-bin but it is not going to be installed
E: Unable to correct problems, you have held broken packages.
The command '/bin/sh -c (apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y build-essential git python python-dev python-setuptools nginx sqlite3 supervisor mysql-server libmysqlclient-dev vim cron unzip software-properties-common python-software-properties openjdk-8-jre xvfb wkhtmltopdf ssmtp sendmail)' returned a non-zero code: 100

如果我将这些包添加到列表中,我就会抱怨其他包。这个“持有损坏的包裹”消息是什么意思,我该如何解决?

这是我的 Dockerfile 的第一部分:

FROM debian:jessie ENV HOME /opt/django/CAPgraph/ 
RUN echo "deb http://http.debian.net/debian jessie-backports main" >> /etc/apt/sources.list 
RUN (apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y build-essential git python python-dev python-setuptools nginx sqlite3 supervisor mysql-server libmysqlclient-dev vim cron unzip software-properties-common python-software-properties openjdk-8-jre xvfb wkhtmltopdf sendmail ssmtp)

我尝试添加 sendmail-bin,然后失败:

The following packages have unmet dependencies:
 sendmail-bin : Conflicts: mail-transport-agent
 ssmtp : Conflicts: mail-transport-agent
E: Unable to correct problems, you have held broken packages.

然后我添加了 mail-transport-agent,但它失败了:

Package mail-transport-agent is a virtual package provided by:
  opensmtpd 5.7.3p2-1~bpo8+1
  ssmtp 2.64-8
  sendmail-bin 8.14.4-8+deb8u1
  qmail-run 2.0.2+nmu1
  postfix 2.11.3-1
  nullmailer 1:1.13-1+deb8u1
  msmtp-mta 1.4.32-2
  masqmail 0.2.30-1
  lsb-invalid-mta 4.1+Debian13+nmu1
  exim4-daemon-light 4.84.2-2+deb8u3
  exim4-daemon-heavy 4.84.2-2+deb8u3
  esmtp-run 1.2-12
  dma 0.9-1
  courier-mta 0.73.1-1.6
  citadel-mta 8.24-1+b3

E: Package 'mail-transport-agent' has no installation candidate

【问题讨论】:

  • apt-get 安装失败的最后几行很少有用。您会回滚到第一个错误并将其包含在问题中吗?
  • 我已经添加了 docker build 的全部输出。
  • 嗯,你会成为最后几行真正有用的少数情况之一。
  • 好吧,您是否也尝试安装sendmail-bin?它是否与您安装的其他任何内容冲突?
  • 我试过了,然后它想要mail-transport-agent,当我补充说它说它没有安装候选者时。我用这些细节更新了我的问题。

标签: docker debian dockerfile docker-build


【解决方案1】:

Debian 设置为只允许一个邮件传输代理,而您的安装命令试图包括两个,ssmtp 和 sendmail/sendmail-bin。由于它们相互冲突,因此您需要从安装命令中删除其中之一。

【讨论】:

    【解决方案2】:

    如果 sendmail 依赖项是您的 Python 应用程序可以通过 sendmail 二进制文件发送电子邮件,只需安装 ssmtp 并将其配置为使用外部 MTA。

    不建议尝试在 Docker 容器中运行 sendmail

    【讨论】:

    • 是的,我需要从 python 脚本发送电子邮件。我首先安装了 ssmtp(从容器内),但邮件没有发送。然后我安装了sendmail,它工作了。不知道为什么我可以从容器内部安装它们,但不能从 Dockerfile 安装。您能否指出一个显示如何配置 ssmtp 以使用外部 MTA 的站点?
    • 我在我的 python 脚本中使用 smtp 包,而不是 sendmail。
    • @LarryMartell 当您从命令行进行安装时,您是否同时安装了它们?如果在 ssmtp 已经安装之后再安装 sendmail,冲突会导致 ssmtp 被自动卸载。
    • 是的,我先安装了ssmtp,然后再安装了sendmail。我将尝试仅使用 sendmail 构建容器,看看是否可以发送邮件。
    • 您是否配置了外部邮件服务器供 ssmtp 使用?我会重申,尝试运行 sendmail 或任何完整的 MTA 包连同您的应用程序都会很痛苦。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-12
    • 2020-09-09
    • 1970-01-01
    • 2022-10-16
    • 2021-04-12
    • 2022-01-21
    相关资源
    最近更新 更多