首页 > 解决方案 > Docker RUN yum -y install epel-release 导致 ERROR

问题描述

我使用 dockerfile 的状态如下:

RUN yum -y install epel-release && yum clean all

在构建图像时,它解释为:

/bin/sh -c yum -y install epel-release

然后,它会导致如下错误:

ERROR:kolla.image.build.base:Error'd with the following message
ERROR:kolla.image.build.base:The command '/bin/sh -c yum -y install epel-release  && yum clean all' returned a non-zero code: 1

/bin/sh -c yum -y install epel-release && yum clean all我在我的 CentOS 7 机器上测试了这个语句。结果如下图。

[root@openstack-test ~]# /bin/sh -c yum -y install epel-release
Failed to set locale, defaulting to C
Loaded plugins: fastestmirror, priorities
You need to give some command
Usage: yum [options] COMMAND

List of Commands:

check          Check for problems in the rpmdb
check-update   Check for available package updates
clean          Remove cached data
deplist        List a package's dependencies
distribution-synchronization Synchronize installed packages to the latest available versions
downgrade      downgrade a package
erase          Remove a package or packages from your system
fs             Acts on the filesystem data of the host, mainly for removing docs/lanuages for minimal hosts.
fssnapshot     Creates filesystem snapshots, or lists/deletes current snapshots.
groups         Display, or use, the groups information
help           Display a helpful usage message
history        Display, or use, the transaction history
info           Display details about a package or group of packages
install        Install a package or packages on your system
list           List a package or groups of packages
load-transaction load a saved transaction from filename
makecache      Generate the metadata cache
provides       Find what package provides the given value
reinstall      reinstall a package
repo-pkgs      Treat a repo. as a group of packages, so we can install/remove all of them
repolist       Display the configured software repositories
search         Search package details for the given string
shell          Run an interactive yum shell
swap           Simple way to swap packages, instead of using shell
update         Update a package or packages on your system
update-minimal Works like upgrade, but goes to the 'newest' package match which fixes a problem that affects your system
updateinfo     Acts on repository update information
upgrade        Update packages taking obsoletes into account
version        Display a version for the machine and/or available repos.


Options:
  -h, --help            show this help message and exit
  -t, --tolerant        be tolerant of errors
  -C, --cacheonly       run entirely from system cache, don't update cache
  -c [config file], --config=[config file]
                        config file location
  -R [minutes], --randomwait=[minutes]
                        maximum command wait time
  -d [debug level], --debuglevel=[debug level]
                        debugging output level
  --showduplicates      show duplicates, in repos, in list/search commands
  -e [error level], --errorlevel=[error level]
                        error output level
  --rpmverbosity=[debug level name]
                        debugging output level for rpm
  -q, --quiet           quiet operation
  -v, --verbose         verbose operation
  -y, --assumeyes       answer yes for all questions
  --assumeno            answer no for all questions
  --version             show Yum version and exit
  --installroot=[path]  set install root
  --enablerepo=[repo]   enable one or more repositories (wildcards allowed)
  --disablerepo=[repo]  disable one or more repositories (wildcards allowed)
  -x [package], --exclude=[package]
                        exclude package(s) by name or glob
  --disableexcludes=[repo]
                        disable exclude from main, for a repo or for
                        everything
  --disableincludes=[repo]
                        disable includepkgs for a repo or for everything
  --obsoletes           enable obsoletes processing during updates
  --noplugins           disable Yum plugins
  --nogpgcheck          disable gpg signature checking
  --disableplugin=[plugin]
                        disable plugins by name
  --enableplugin=[plugin]
                        enable plugins by name
  --skip-broken         skip packages with depsolving problems
  --color=COLOR         control whether color is used
  --releasever=RELEASEVER
                        set value of $releasever in yum config and repo files
  --downloadonly        don't update, just download
  --downloaddir=DLDIR   specifies an alternate directory to store packages
  --setopt=SETOPTS      set arbitrary config and repo options
  --bugfix              Include bugfix relevant packages, in updates
  --security            Include security relevant packages, in updates
  --advisory=ADVS, --advisories=ADVS
                        Include packages needed to fix the given advisory, in
                        updates
  --bzs=BZS             Include packages needed to fix the given BZ, in
                        updates
  --cves=CVES           Include packages needed to fix the given CVE, in
                        updates
  --sec-severity=SEVS, --secseverity=SEVS
                        Include security relevant packages matching the
                        severity, in updates

  Plugin Options:
    --samearch-priorities
                        Priority-exclude packages based on name + arch

当我使用像下面这样的另一个命令时,它会正确运行。

[root@openstack-test ~]# /bin/sh -c ls anaconda-ks.cfg
anaconda-ks.cfg  pike-stable

然后我尝试使用这种形式的命令,它也可以正常运行。

[root@openstack-test ~]# /bin/sh -c "yum install epel-release"
Failed to set locale, defaulting to C
Loaded plugins: fastestmirror, priorities
Loading mirror speeds from cached hostfile
 * base: mirror.dal10.us.leaseweb.net
 * centos-qemu-ev: mirror.dal10.us.leaseweb.net
 * epel: packages.oit.ncsu.edu
 * extras: centos.s.uw.edu
 * updates: mirror.dal10.us.leaseweb.net
Package epel-release-7-12.noarch already installed and latest version
Nothing to do
[root@openstack-test ~]# /bin/sh -c "yum -y install epel-release"
Failed to set locale, defaulting to C
Loaded plugins: fastestmirror, priorities
Loading mirror speeds from cached hostfile
 * base: mirror.dal10.us.leaseweb.net
 * centos-qemu-ev: mirror.dal10.us.leaseweb.net
 * epel: packages.oit.ncsu.edu
 * extras: centos.s.uw.edu
 * updates: mirror.dal10.us.leaseweb.net
Package epel-release-7-12.noarch already installed and latest version
Nothing to do

那么版本/bin/sh是:

[root@openstack-test ~]# /bin/sh -version
GNU bash, version 4.2.46(1)-release (x86_64-redhat-linux-gnu)
Copyright (C) 2011 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
[root@openstack-test ~]#

为什么会发生,我该如何解决和避免这个问题。

请帮忙,非常感谢。

标签: linuxdockersh

解决方案


我发现了问题,它不是由 Dockerfile RUN 命令引起的。它是由这个 repo 链接引起的: https://trunk.rdoproject.org/centos7-pike/delorean-deps.repo

此回购链接不再存在。因此,它显示错误:

Step 26/35 : RUN yum -y install epel-release yum-plugin-priorities centos-release-ceph-jewel centos-release-opstools centos-release-qemu-ev && yum clean all
 ---> Running in b9f64321e50e
Loaded plugins: fastestmirror, ovl


File contains no section headers.
file: file:///etc/yum.repos.d/delorean-deps.repo, line: 1
'<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">\n'
The command '/bin/sh -c yum -y install epel-release yum-plugin-priorities centos-release-ceph-jewel centos-release-opstools centos-release-qemu-ev && yum clean all' returned a non-zero code: 1

推荐阅读