Docker之常见FAQ记录清单

2024-04-25 10:44
文章标签 常见 docker 记录 清单 faq

本文主要是介绍Docker之常见FAQ记录清单,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、前言

本文记录Docker使用过程中遇见的问题,供后续回顾参考。

关联资源:网络Docker博客

二、问题及处理记录

2.1、docker容器内没有vi,nano等编辑器

1)如果宿主机本地有,可映射到docker容器内,但vim会有共享库限制;

docker run -v /usr/bin/vi:/usr/bin/vi --name mysql_soft image_name

2)docker容器内执行apt update报错:

Get:1 http://deb.debian.org/debian bookworm InRelease [151 kB]
Get:2 http://deb.debian.org/debian bookworm-updates InRelease [55.4 kB]
Get:3 http://deb.debian.org/debian-security bookworm-security InRelease [48.0 kB]
Get:4 http://deb.debian.org/debian bookworm/main amd64 Packages [8786 kB]
Get:5 http://deb.debian.org/debian bookworm-updates/main amd64 Packages [13.8 kB]
Get:6 http://deb.debian.org/debian-security bookworm-security/main amd64 Packages [155 kB]
Fetched 9209 kB in 2s (5838 kB/s)
Reading package lists…
E: Problem executing scripts APT::Update::Post-Invoke ‘rm -f /var/cache/apt/archives/.deb /var/cache/apt/archives/partial/.deb /var/cache/apt/*.bin || true’
E: Sub-process returned an error code

分析处理过程:

//docker网络检查
docker run redis apt update  #宿主机执行更新检查,报错同上,ping deb.debian.org通,网络正常
//相关经验表明:Docker version 20.10.9以及以下版本使用apt有问题,要么升级,要么执行如下临时修改,
sed -i -e 's/^APT/# APT/' -e 's/^DPkg/# DPkg/' /etc/apt/apt.conf.d/docker-clean
#现场docker版本
docker --version
Docker version 20.10.7, build f0df350
#查看可从软件源安装的软件包的版本列表
apt-cache madison <package_name>
#容器OS版本cat /etc/os-release 
PRETTY_NAME="Debian GNU/Linux 12 (bookworm)"
NAME="Debian GNU/Linux"
VERSION_ID="12"
VERSION="12 (bookworm)"
VERSION_CODENAME=bookworm
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"
#修改docker-clean文件后再次执行:
apt update  #输出如下
Hit:1 http://deb.debian.org/debian bookworm InRelease
Hit:2 http://deb.debian.org/debian bookworm-updates InRelease
Hit:3 http://deb.debian.org/debian-security bookworm-security InRelease
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
2 packages can be upgraded. Run 'apt list --upgradable' to see them.#安装再次报错:apt-get install vim -ydpkg-deb --control subprocess returned error exit status 2
dpkg-deb (subprocess): decompressing archive '/tmp/apt-dpkg-install-UoSzsi/3-vim-runtime_2%3a9.0.1378-2_all.deb' (size=7025180) member 'control.tar': lzma error: Cannot allocate memory
tar: This does not look like a tar archive
tar: Exiting with failure status due to previous errors
dpkg-deb: error: tar subprocess returned error exit status 2
dpkg: error processing archive /tmp/apt-dpkg-install-UoSzsi/3-vim-runtime_2%3a9.0.1378-2_all.deb (--unpack):dpkg-deb --control subprocess returned error exit status 2
dpkg-deb (subprocess): decompressing archive '/tmp/apt-dpkg-install-UoSzsi/4-vim_2%3a9.0.1378-2_amd64.deb' (size=1567304) member 'control.tar': lzma error: Cannot allocate memory
tar: This does not look like a tar archive
tar: Exiting with failure status due to previous errors
dpkg-deb: error: tar subprocess returned error exit status 2
dpkg: error processing archive /tmp/apt-dpkg-install-UoSzsi/4-vim_2%3a9.0.1378-2_amd64.deb (--unpack):dpkg-deb --control subprocess returned error exit status 2
dpkg-deb (subprocess): decompressing archive '/tmp/apt-dpkg-install-UoSzsi/5-xxd_2%3a9.0.1378-2_amd64.deb' (size=83680) member 'control.tar': lzma error: Cannot allocate memory
#容器因与宿主机共用内核,所以需修改内核参数
vim /etc/sysctl.conf  #新增
fs.file-max = 1500000
fs.nr_open = 1500000
net.core.somaxconn = 2048
vm.overcommit_memory = 1或:echo 1 > /proc/sys/vm/overcommit_memory
#为容器分配内存和交换空间,--memory-swap 参数用于设置容器可使用的总交换空间大小(包括内存和交换分区)。这个值必须大于或等于指定的 --memory 参数值
docker inspect --format='{{.HostConfig.MemoryReservation}}, {{.HostConfig.MemorySwap}}' 
docker update redis -m 512m --memory-swap -1  #其中,容器能够使用无限的交换空间,可以设置 --memory-swap 为 -1#要想让所有容器这2个值一样,直接修改宿主机的
vim /etc/docker/daemon.json{"default-memory-swap": "2g","default-memory": "1g"
}## 结果还是不行,没有权限修改,/etc/security/limit.conf为只读,出于安全和一致性的考虑,Docker 容器通常以只读的方式挂载许多系统文件和目录
docker run --user $(id -u):$(id -g) your-image
docker run --itd --privileged=true --name redis redis /bin/bash   #其中,privileged=true:获得真正的root权限,使其能够访问宿主机的所有设备,并且可以执行一些通常需要特权的操作,但不一定能够直接修改 /etc/security/limit.conf 文件
docker run -it --ulimit nofile=1024:4096 redis  #参数修改,nofile 表示文件描述符的数量,1024:4096 分别表示软限制和硬限制。#修改为镜像,提交
docker commit -m “备注” -a “作者” 容器id 镜像repository## 反构建通过镜像生成对应的dockfile文件
git clone https://github.com/CenturyLinkLabs/dockerfile-from-image.git
cd dockerfile-from-image
./bin/dockerfile-from-image <image_name> > Dockerfile
#配合
docker history <image_name>  #修改Dockerfile

这篇关于Docker之常见FAQ记录清单的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/934459

相关文章

MyBatis 动态 SQL 优化之标签的实战与技巧(常见用法)

《MyBatis动态SQL优化之标签的实战与技巧(常见用法)》本文通过详细的示例和实际应用场景,介绍了如何有效利用这些标签来优化MyBatis配置,提升开发效率,确保SQL的高效执行和安全性,感... 目录动态SQL详解一、动态SQL的核心概念1.1 什么是动态SQL?1.2 动态SQL的优点1.3 动态S

Spring Boot 配置文件之类型、加载顺序与最佳实践记录

《SpringBoot配置文件之类型、加载顺序与最佳实践记录》SpringBoot的配置文件是灵活且强大的工具,通过合理的配置管理,可以让应用开发和部署更加高效,无论是简单的属性配置,还是复杂... 目录Spring Boot 配置文件详解一、Spring Boot 配置文件类型1.1 applicatio

MySQL INSERT语句实现当记录不存在时插入的几种方法

《MySQLINSERT语句实现当记录不存在时插入的几种方法》MySQL的INSERT语句是用于向数据库表中插入新记录的关键命令,下面:本文主要介绍MySQLINSERT语句实现当记录不存在时... 目录使用 INSERT IGNORE使用 ON DUPLICATE KEY UPDATE使用 REPLACE

Docker镜像pull失败两种解决办法小结

《Docker镜像pull失败两种解决办法小结》有时候我们在拉取Docker镜像的过程中会遇到一些问题,:本文主要介绍Docker镜像pull失败两种解决办法的相关资料,文中通过代码介绍的非常详细... 目录docker 镜像 pull 失败解决办法1DrQwWCocker 镜像 pull 失败解决方法2总

Python 中的异步与同步深度解析(实践记录)

《Python中的异步与同步深度解析(实践记录)》在Python编程世界里,异步和同步的概念是理解程序执行流程和性能优化的关键,这篇文章将带你深入了解它们的差异,以及阻塞和非阻塞的特性,同时通过实际... 目录python中的异步与同步:深度解析与实践异步与同步的定义异步同步阻塞与非阻塞的概念阻塞非阻塞同步

Python Dash框架在数据可视化仪表板中的应用与实践记录

《PythonDash框架在数据可视化仪表板中的应用与实践记录》Python的PlotlyDash库提供了一种简便且强大的方式来构建和展示互动式数据仪表板,本篇文章将深入探讨如何使用Dash设计一... 目录python Dash框架在数据可视化仪表板中的应用与实践1. 什么是Plotly Dash?1.1

通过Docker Compose部署MySQL的详细教程

《通过DockerCompose部署MySQL的详细教程》DockerCompose作为Docker官方的容器编排工具,为MySQL数据库部署带来了显著优势,下面小编就来为大家详细介绍一... 目录一、docker Compose 部署 mysql 的优势二、环境准备与基础配置2.1 项目目录结构2.2 基

java常见报错及解决方案总结

《java常见报错及解决方案总结》:本文主要介绍Java编程中常见错误类型及示例,包括语法错误、空指针异常、数组下标越界、类型转换异常、文件未找到异常、除以零异常、非法线程操作异常、方法未定义异常... 目录1. 语法错误 (Syntax Errors)示例 1:解决方案:2. 空指针异常 (NullPoi

C++常见容器获取头元素的方法大全

《C++常见容器获取头元素的方法大全》在C++编程中,容器是存储和管理数据集合的重要工具,不同的容器提供了不同的接口来访问和操作其中的元素,获取容器的头元素(即第一个元素)是常见的操作之一,本文将详细... 目录一、std::vector二、std::list三、std::deque四、std::forwa

Spring Boot中定时任务Cron表达式的终极指南最佳实践记录

《SpringBoot中定时任务Cron表达式的终极指南最佳实践记录》本文详细介绍了SpringBoot中定时任务的实现方法,特别是Cron表达式的使用技巧和高级用法,从基础语法到复杂场景,从快速启... 目录一、Cron表达式基础1.1 Cron表达式结构1.2 核心语法规则二、Spring Boot中定