关于在容器通过apt安装程序碰到的问题

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器镜像服务 ACR,镜像仓库100个 不限时长
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介: 记录容器安装程序的问题

关于我为什么碰到以下问题:
我是在容器中碰到这些问题的。
我把主机的/var/lib目录映射到容器中了,由于宿主机是yum包管理,容器中是apt包管理,所以/var/lib/dpkg目录是不存在的。
我多次重新创建这个容器或删除,所以导致以前安装了软件包,但实际上软件不存在的情况,安装记录信息存在/var/lib/dpkg中,由于挂载到宿主机上了,安装信息被保留了下来,所以导致新的容器安装不上,会提示已经安装

现象1

安装lsof,但提示已经安装了,通过whereiswhich又没有找到这个lsof命令

# apt install lsof
Reading package lists... Done
Building dependency tree
Reading state information... Done
lsof is already the newest version (4.89+dfsg-0.1).
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
# whereis lsof
lsof:
# which lsof
#

可能是以前安装过lsof,但是这个命令又被删除了,你需要重新安装,但是apt这个包管理工具,可能存在安装记录,就会提示你已经按照,不需要再安装了。

# pwd
/var/lib/dpkg
# grep -r "lsof" *
info/lsof.md5sums:e093dc78225e2a0a25e3b137c1c1e442  usr/bin/lsof
info/lsof.md5sums:e27dc9f6db132613e3c4f22f7c1aad3a  usr/share/doc/lsof/00FAQ.gz
info/lsof.md5sums:e5767ce8d0aace46a4477eeb8380bbff  usr/share/doc/lsof/00LSOF-L
info/lsof.md5sums:08eb541bb8e7e2f5618a0d43fc9ad997  usr/share/doc/lsof/00QUICKSTART.gz
info/lsof.md5sums:b6f69b1684c56dd6153e6fe988327b6a  usr/share/doc/lsof/README.Debian
info/lsof.md5sums:18bc90df5810d7724e1e4d5306033552  usr/share/doc/lsof/changelog.Debian.gz
info/lsof.md5sums:a096f2ce9ff41c92dd29148c124014a2  usr/share/doc/lsof/copyright
info/lsof.md5sums:614e957e5c9a4d270bf66c8d230a1712  usr/share/doc/lsof/examples/00MANIFEST
info/lsof.md5sums:817ae17dd85ae5cb7634739c5978e902  usr/share/doc/lsof/examples/00README
info/lsof.md5sums:cc12e0167439712d43e8f2b97805281a  usr/share/doc/lsof/examples/big_brother.perl5.gz
info/lsof.md5sums:2c610c1e69a6b7db96e440af906831a4  usr/share/doc/lsof/examples/count_pf.perl
info/lsof.md5sums:85bb99959d1beff6922957f9025ee18b  usr/share/doc/lsof/examples/count_pf.perl5
info/lsof.md5sums:120b65ef31729a3d80ee4bdb4ab4ec32  usr/share/doc/lsof/examples/identd.perl5
info/lsof.md5sums:6571cbd6ae19a23691615217b1a5909b  usr/share/doc/lsof/examples/idrlogin.perl.gz
info/lsof.md5sums:39eed486a94b38bacc1c56b8a15806cf  usr/share/doc/lsof/examples/idrlogin.perl5.gz
info/lsof.md5sums:0fe9bb02027d1de3b9e7dadeed2a04c2  usr/share/doc/lsof/examples/list_NULf.perl5.gz
info/lsof.md5sums:ae45711c792c74a904f5e2f3fa8eebbd  usr/share/doc/lsof/examples/list_fields.awk.gz
info/lsof.md5sums:35785f4ff72fdc655d625a0d84be9033  usr/share/doc/lsof/examples/list_fields.perl.gz
info/lsof.md5sums:f06259402a501efcb1d85b85b5cdd8c5  usr/share/doc/lsof/examples/shared.perl5.gz
info/lsof.md5sums:8b28a29e16148275dd0b879ada8278f2  usr/share/doc/lsof/examples/sort_res.perl5
info/lsof.md5sums:f5c6aa1f955c3ac9700cf38fe84f4686  usr/share/doc/lsof/examples/watch_a_file.perl
info/lsof.md5sums:4f2e252bc57ecef48454347f8966fbca  usr/share/doc/lsof/examples/xusers.awk
info/lsof.md5sums:c650f494018f872d7c779433981039e7  usr/share/man/man8/lsof.8.gz
info/lsof.list:/usr/share/doc/lsof
info/lsof.list:/usr/share/doc/lsof/00LSOF-L
info/lsof.list:/usr/share/doc/lsof/README.Debian
info/lsof.list:/usr/share/doc/lsof/examples
info/lsof.list:/usr/share/doc/lsof/examples/00MANIFEST
info/lsof.list:/usr/share/doc/lsof/examples/count_pf.perl
info/lsof.list:/usr/share/doc/lsof/examples/shared.perl5.gz
info/lsof.list:/usr/share/doc/lsof/examples/list_NULf.perl5.gz
info/lsof.list:/usr/share/doc/lsof/examples/big_brother.perl5.gz
info/lsof.list:/usr/share/doc/lsof/examples/idrlogin.perl.gz
info/lsof.list:/usr/share/doc/lsof/examples/identd.perl5
info/lsof.list:/usr/share/doc/lsof/examples/watch_a_file.perl
info/lsof.list:/usr/share/doc/lsof/examples/xusers.awk
info/lsof.list:/usr/share/doc/lsof/examples/idrlogin.perl5.gz
info/lsof.list:/usr/share/doc/lsof/examples/count_pf.perl5
info/lsof.list:/usr/share/doc/lsof/examples/list_fields.awk.gz
info/lsof.list:/usr/share/doc/lsof/examples/00README
info/lsof.list:/usr/share/doc/lsof/examples/list_fields.perl.gz
info/lsof.list:/usr/share/doc/lsof/examples/sort_res.perl5
info/lsof.list:/usr/share/doc/lsof/00QUICKSTART.gz
info/lsof.list:/usr/share/doc/lsof/00FAQ.gz
info/lsof.list:/usr/share/doc/lsof/copyright
info/lsof.list:/usr/share/doc/lsof/changelog.Debian.gz
info/lsof.list:/usr/share/man/man8/lsof.8.gz
info/lsof.list:/usr/bin/lsof
status:Package: lsof
status-old:Package: lsof

有4个文件存在lsof相关信息,把它删除了再说

# rm -rf /var/lib/dpkg/info/lsof.md5sums
# rm -rf /var/lib/dpkg/info/lsof.list
# rm -rf /var/lib/dpkg/status
# rm -rf /var/lib/dpkg/status-old

再次执行安装lsof提示/var/lib/dpkg/status不存在

# apt install lsof
Reading package lists... Error!
E: flAbsPath on /var/lib/dpkg/status failed - realpath (2: No such file or directory)
E: Could not open file  - open (2: No such file or directory)
E: Problem opening
E: The package lists or status file could not be parsed or opened.

再次执行,安装成功。

# touch /var/lib/dpkg/status
# apt install lsof

总结: 之前删除了4个文件,我再次尝试,发现只需要删除/var/lib/dpkg/status这个文件,再重新创建,就可以执行安装了。其它文件都不需要动。

现象2

安装工具包,提示某个文件不存在

# apt install net-tools
E: Could not open lock file /var/lib/dpkg/lock-frontend - open (2: No such file or directory)
E: Unable to acquire the dpkg frontend lock (/var/lib/dpkg/lock-frontend), are you root?

解决思路:

  1. 先把不存在的文件创建出来,结果发现创建不成功。
  2. 经过排查发现是/var/lib/dpkg目录不存在,创建这个目录,再创建/var/lib/dpkg/lock-frontend文件
  3. 上面2个步骤都解决后,碰到/var/lib/dpkg/status文件不存在的错误,只需创建这个文件即可解决
  4. /var/lib/dpkg/status 这个文件创建完成后,再次执行安装工具包命令,错误出现了/var/lib/dpkg/updates/这个目录不存在
  5. 创建目录/var/lib/dpkg/updates/,再次执行安装工具包命令,出现错误提示/var/lib/dpkg/info/format-new这个文件不存在
  6. 创建/var/lib/dpkg/info/format-new这个文件,提示创建不成功,排查发现/var/lib/dpkg/info这个目录不存在
  7. 解决/var/lib/dpkg/info/format-new这个文件不存在的问题,接着安装工具包,成功了。
# touch /var/lib/dpkg/lock-frontend
touch: cannot touch '/var/lib/dpkg/lock-frontend': No such file or directory

# mkdir /var/lib/dpkg
# touch /var/lib/dpkg/lock-frontend

# touch /var/lib/dpkg/status

# mkdir /var/lib/dpkg/updates/

# mkdir /var/lib/dpkg/info
# touch /var/lib/dpkg/info/format-new

又碰到这个,应该知道怎么解决了,只需创建/var/lib/dpkg/status

# apt install net-tools
Reading package lists... Error!
E: flAbsPath on /var/lib/dpkg/status failed - realpath (2: No such file or directory)
E: Could not open file  - open (2: No such file or directory)
E: Problem opening
E: The package lists or status file could not be parsed or opened.
# apt install net-tools
...
debconf: delaying package configuration, since apt-utils is not installed
dpkg: error: cannot scan updates directory '/var/lib/dpkg/updates/': No such file or directory
E: Sub-process /usr/bin/dpkg returned an error code (2)
Fetched 3382 kB in 8s (439 kB/s)
debconf: delaying package configuration, since apt-utils is not installed
dpkg: error: unable to create new file '/var/lib/dpkg/info/format-new': No such file or directory
E: Sub-process /usr/bin/dpkg returned an error code (2)
# apt install net-tools
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
  gcc-8-base libc6 libgcc1 libpcre3 libselinux1
Suggested packages:
  glibc-doc debconf | debconf-2.0 locales
The following NEW packages will be installed:
Selecting previously unselected package gcc-8-base:amd64.
(Reading database ... 0 files and directories currently installed.)
Preparing to unpack .../gcc-8-base_8.4.0-1ubuntu1~18.04_amd64.deb ...
Unpacking gcc-8-base:amd64 (8.4.0-1ubuntu1~18.04) ...
Selecting previously unselected package libgcc1:amd64.
Preparing to unpack .../libgcc1_1%3a8.4.0-1ubuntu1~18.04_amd64.deb ...
Unpacking libgcc1:amd64 (1:8.4.0-1ubuntu1~18.04) ...
Selecting previously unselected package libc6:amd64.
Preparing to unpack .../libc6_2.27-3ubuntu1.5_amd64.deb ...
debconf: unable to initialize frontend: Dialog
debconf: (No usable dialog-like program is installed, so the dialog based frontend cannot be used. at /usr/share/perl5/Debconf/FrontEnd/Dialog.pm line 76.)
debconf: falling back to frontend: Readline
debconf: unable to initialize frontend: Readline
debconf: (Can't locate Term/ReadLine.pm in @INC (you may need to install the Term::ReadLine module) (@INC contains: /etc/perl /usr/local/lib/x86_64-linux-gnu/perl/5.26.1 /usr/local/share/perl/5.26.1 /usr/lib/x86_64-linux-gnu/perl5/5.26 /usr/share/perl5 /usr/lib/x86_64-linux-gnu/perl/5.26 /usr/share/perl/5.26 /usr/local/lib/site_perl /usr/lib/x86_64-linux-gnu/perl-base) at /usr/share/perl5/Debconf/FrontEnd/Readline.pm line 7.)
debconf: falling back to frontend: Teletype
Unpacking libc6:amd64 (2.27-3ubuntu1.5) ...
Selecting previously unselected package libpcre3:amd64.
Preparing to unpack .../libpcre3_2%3a8.39-9ubuntu0.1_amd64.deb ...
Unpacking libpcre3:amd64 (2:8.39-9ubuntu0.1) ...
Selecting previously unselected package libselinux1:amd64.
Preparing to unpack .../libselinux1_2.7-2build2_amd64.deb ...
Unpacking libselinux1:amd64 (2.7-2build2) ...
Selecting previously unselected package net-tools.
Preparing to unpack .../net-tools_1.60+git20161116.90da8a0-1ubuntu1_amd64.deb ...
Unpacking net-tools (1.60+git20161116.90da8a0-1ubuntu1) ...
Setting up gcc-8-base:amd64 (8.4.0-1ubuntu1~18.04) ...
Setting up libc6:amd64 (2.27-3ubuntu1.5) ...
debconf: unable to initialize frontend: Dialog
debconf: (No usable dialog-like program is installed, so the dialog based frontend cannot be used. at /usr/share/perl5/Debconf/FrontEnd/Dialog.pm line 76.)
debconf: falling back to frontend: Readline
debconf: unable to initialize frontend: Readline
debconf: (Can't locate Term/ReadLine.pm in @INC (you may need to install the Term::ReadLine module) (@INC contains: /etc/perl /usr/local/lib/x86_64-linux-gnu/perl/5.26.1 /usr/local/share/perl/5.26.1 /usr/lib/x86_64-linux-gnu/perl5/5.26 /usr/share/perl5 /usr/lib/x86_64-linux-gnu/perl/5.26 /usr/share/perl/5.26 /usr/local/lib/site_perl /usr/lib/x86_64-linux-gnu/perl-base) at /usr/share/perl5/Debconf/FrontEnd/Readline.pm line 7.)
debconf: falling back to frontend: Teletype
Setting up libpcre3:amd64 (2:8.39-9ubuntu0.1) ...
Setting up libselinux1:amd64 (2.7-2build2) ...
Setting up net-tools (1.60+git20161116.90da8a0-1ubuntu1) ...
Setting up libgcc1:amd64 (1:8.4.0-1ubuntu1~18.04) ...
目录
相关文章
|
4月前
|
存储 安全 Linux
Podman入门全指南:安装、配置与运行容器
Podman入门全指南:安装、配置与运行容器
2026 1
|
1月前
|
NoSQL 关系型数据库 Redis
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo
mall在linux环境下的部署(基于Docker容器),docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongodb、minio详细教程,拉取镜像、运行容器
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo
|
18天前
|
Prometheus 监控 Cloud Native
docker安装prometheus+Granfan并监控容器
【9月更文挑战第14天】本文介绍了在Docker中安装Prometheus与Grafana并监控容器的步骤,包括创建配置文件、运行Prometheus与Grafana容器,以及在Grafana中配置数据源和创建监控仪表盘,展示了如何通过Prometheus抓取数据并利用Grafana展示容器的CPU使用率等关键指标。
|
2月前
|
应用服务中间件 Linux nginx
Linux虚拟机磁盘扩容、Docker容器磁盘满的问题、Docker安装nginx
这篇文章讨论了Linux虚拟机磁盘扩容的方法,包括外部配置、具体扩容步骤和扩容后的效果验证。同时,文章还涉及了Docker容器磁盘满的问题及其解决方法,如删除不必要的镜像和容器,以及调整Docker的安装路径。此外,还提到了意外情况的处理,例如误删除停止的容器后的应对措施。最后,文章还提供了使用Docker安装nginx的步骤和成功访问的截图。
Linux虚拟机磁盘扩容、Docker容器磁盘满的问题、Docker安装nginx
|
2月前
|
Linux 开发工具 数据库
【REP】hrms-ERPNext 容器安装配置
【REP】hrms-ERPNext 容器安装配置
|
2月前
|
Linux Docker 容器
在CentOS操作系统上使用yum安装/使用/卸载Docker容器引擎
在CentOS操作系统上安装、配置、使用和卸载Docker容器引擎的详细步骤,包括配置Docker镜像加速的方法。
215 0
|
2月前
|
Ubuntu NoSQL 关系型数据库
在Ubuntu操作系统上安装/使用/卸载Docker容器引擎
这篇文章详细介绍了在Ubuntu操作系统上安装、配置、使用、基本操作以及卸载Docker容器引擎的步骤,包括配置Docker镜像加速和使用Docker部署Nginx、MySQL和Redis服务器的方法。
55 0
|
5月前
|
网络协议 安全 Linux
1.安装 docker 容器并配置镜像加速器
1.安装 docker 容器并配置镜像加速器
502 11
|
5月前
|
运维 Kubernetes 监控
本地CentOS安装轻量级容器PaaS平台KubeSphere并实现无公网IP远程访问
本地CentOS安装轻量级容器PaaS平台KubeSphere并实现无公网IP远程访问
70 0
|
5月前
|
NoSQL Redis Docker
Mac上轻松几步搞定Docker与Redis安装:从下载安装到容器运行实测全程指南
Mac上轻松几步搞定Docker与Redis安装:从下载安装到容器运行实测全程指南
741 0
下一篇
无影云桌面