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

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 记录容器安装程序的问题

关于我为什么碰到以下问题:
我是在容器中碰到这些问题的。
我把主机的/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) ...
目录
相关文章
|
6月前
|
监控 关系型数据库 MySQL
zabbix7.0.9安装-以宝塔安装形式-非docker容器安装方法-系统采用AlmaLinux9系统-最佳匹配操作系统提供稳定运行环境-安装教程完整版本-优雅草卓伊凡
zabbix7.0.9安装-以宝塔安装形式-非docker容器安装方法-系统采用AlmaLinux9系统-最佳匹配操作系统提供稳定运行环境-安装教程完整版本-优雅草卓伊凡
380 30
|
6月前
|
Ubuntu 关系型数据库 MySQL
容器技术实践:在Ubuntu上使用Docker安装MySQL的步骤。
通过以上的操作,你已经步入了Docker和MySQL的世界,享受了容器技术给你带来的便利。这个旅程中你可能会遇到各种挑战,但是只要你沿着我们划定的路线行进,你就一定可以达到目的地。这就是Ubuntu、Docker和MySQL的灵魂所在,它们为你开辟了一条通往新探索的道路,带你亲身感受到了技术的力量。欢迎在Ubuntu的广阔大海中探索,用Docker技术引领你的航行,随时准备感受新技术带来的震撼和乐趣。
289 16
|
7月前
|
Ubuntu API 网络虚拟化
ubuntu22 编译安装docker,和docker容器方式安装 deepseek
本脚本适用于Ubuntu 22.04,主要功能包括编译安装Docker和安装DeepSeek模型。首先通过Apt源配置安装Docker,确保网络稳定(建议使用VPN)。接着下载并配置Docker二进制文件,创建Docker用户组并设置守护进程。随后拉取Debian 12镜像,安装系统必备工具,配置Ollama模型管理器,并最终部署和运行DeepSeek模型,提供API接口进行交互测试。
970 15
|
10月前
|
Java 应用服务中间件 Linux
【Docker容器化技术】docker安装与部署、常用命令、容器数据卷、应用部署实战、Dockerfile、服务编排docker-compose、私有仓库
本文主要讲解了Docker的安装与部署、常用命令、容器数据卷、应用部署实战、Dockerfile、服务编排docker-compose、私有仓库以及Docker容器虚拟化与传统虚拟机比较。
12169 38
【Docker容器化技术】docker安装与部署、常用命令、容器数据卷、应用部署实战、Dockerfile、服务编排docker-compose、私有仓库
|
存储 安全 Linux
Podman入门全指南:安装、配置与运行容器
Podman入门全指南:安装、配置与运行容器
7957 1
|
11月前
|
JavaScript 前端开发 Docker
前端的全栈之路Meteor篇(一):开发环境的搭建 -全局安装或使用容器镜像
本文介绍了如何搭建 Meteor 开发环境,包括全局安装 Meteor 工具和使用 Docker 镜像两种方法,以及创建和运行一个简单的 Meteor 项目的基本步骤。 Meteor 是一个全栈 JavaScript 框架,适用于构建实时 Web 应用程序。文章还提供了遇到问题时的解决建议和调试技巧。
519 3
|
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
|
Prometheus 监控 Cloud Native
docker安装prometheus+Granfan并监控容器
【9月更文挑战第14天】本文介绍了在Docker中安装Prometheus与Grafana并监控容器的步骤,包括创建配置文件、运行Prometheus与Grafana容器,以及在Grafana中配置数据源和创建监控仪表盘,展示了如何通过Prometheus抓取数据并利用Grafana展示容器的CPU使用率等关键指标。
613 1
|
应用服务中间件 Linux nginx
Linux虚拟机磁盘扩容、Docker容器磁盘满的问题、Docker安装nginx
这篇文章讨论了Linux虚拟机磁盘扩容的方法,包括外部配置、具体扩容步骤和扩容后的效果验证。同时,文章还涉及了Docker容器磁盘满的问题及其解决方法,如删除不必要的镜像和容器,以及调整Docker的安装路径。此外,还提到了意外情况的处理,例如误删除停止的容器后的应对措施。最后,文章还提供了使用Docker安装nginx的步骤和成功访问的截图。
Linux虚拟机磁盘扩容、Docker容器磁盘满的问题、Docker安装nginx
|
Linux 开发工具 数据库
【REP】hrms-ERPNext 容器安装配置
【REP】hrms-ERPNext 容器安装配置