背景
ubuntu 机器上有个非root用户,需要执行docker命令,但是没有权限。sudo 还要输出密码,用户都是免密登录鬼才知道密码哈哈
将用户添加到 docker
组
Docker 默认会创建一个
docker
组。将普通用户添加到这个组,就可以执行docker命令。
usermod -aG docker <username>
# 验证一下
groups <username>
ubuntu 机器上有个非root用户,需要执行docker命令,但是没有权限。sudo 还要输出密码,用户都是免密登录鬼才知道密码哈哈
docker
组Docker 默认会创建一个
docker
组。将普通用户添加到这个组,就可以执行docker命令。
usermod -aG docker <username>
# 验证一下
groups <username>
有的时候主机的DNS,docker的DNS不想设置一致,或是部分场景需要,或是业务需要,故此有此主题。
默认docker容器的DNS是主机的DNS,那么原本更改主机的DNS就好了,但是运维反馈,腾讯云ECS的DNS会变动(离塞谱),由于没有权限访问一些模块,也没办法排查,找到根因,故此就以docker配置DNS为例,临时解决一下。
# lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 22.04.3 LTS
Release: 22.04
Codename: jammy
# docker info
Client: Docker Engine - Community
Version: 24.0.7
Context: default
Debug Mode: false
# 作为容器DNS测试
docker pull ubuntu:20.04
# lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 22.04.3 LTS
Release: 22.04
Codename: jammy
启动docker容器异常,信息如下
docker start aip-ocr-server-v6
Error response from daemon: failed to create task for container: failed to start shim: write /run/containerd/io.containerd.runtime.v2.task/moby/ca8498a5d2665810c9ec067944a642cdad2a47075521ca63a1b2f195b9a2f1d0/config.json: no space left on device: unknown
参考资料:
https://redis.io/docs/latest/get-started/
Redis 是一种内存数据存储,广泛被数百万开发者用于缓存、向量数据库、文档数据库、流处理引擎和消息代理。Redis 内置了复制功能,并提供不同级别的磁盘持久化。它支持复杂的数据类型(例如,字符串、哈希、列表、集合、有序集合和 JSON),并在这些数据类型上定义了原子操作。
本实践将在 Ubuntu 22.04.3LTS 系统上进行测试
docker 版本Docker Engine - Community 24.0.6
,原则上docker版本无影响
本实践进仅学习研究使用,无作他用途。
曾几何时,docker镜像的拉取会失败,网速会慢,那会我们的通常处理方案是镜像加速。如今,镜像加速已经失效,我们如何解决?
本文将介绍一种解决方案的详细步骤,同时给出其他方案。
Skopeo
安装说明:https://github.com/containers/skopeo/blob/main/install.md 中介绍 Ubuntu要在20.10 以上版本安装。
我在Ubuntu 20.04
上通过源码编译安装,出现了很多意外的错误。下面是在不升级的情况下安装Skopeo
本实践将在 Ubuntu 22.04.3LTS 系统上进行测试
docker 版本Docker Engine - Community 24.0.6
,原则上docker版本无影响
ps aux
显示多个进程 , 当这个进程是docker进程的时候无法区分是那个docker的进程
使用 docker top
和 grep
:
首先,通过列出所有正在运行的容器,然后使用 docker top
命令来检查每个容器的进程列表。
例如,假设你想查找 PID 为 12345
的进程属于哪个容器,可以使用以下脚本:
PID=12345 # 替换为你要查找的进程 PID
for container in $(docker ps -q); do
if docker top $container | grep -w $PID > /dev/null 2>&1; then
echo "PID $PID belongs to container $container"
break
fi
done
使用 docker inspect
:
docker inspect
命令可以显示容器的详细信息,包括它们的主进程 ID。你可以利用这个来检查每个容器的主进程 ID。
PID=12345 # 替换为你要查找的进程 PID
for container in $(docker ps -q); do
container_pid=$(docker inspect --format '{{.State.Pid}}' $container)
if [ "$container_pid" -eq "$PID" ]; then
echo "PID $PID belongs to container $container"
break
fi
done
查找容器的命名空间:
使用命名空间的方法也可以帮助查找哪个容器包含特定的 PID。
PID=12345 # 替换为你要查找的进程 PID
for container in $(docker ps -q); do
container_pid=$(docker inspect --format '{{.State.Pid}}' $container)
if [ -n "$container_pid" ]; then
if [ "$(readlink /proc/$PID/ns/pid)" == "$(readlink /proc/$container_pid/ns/pid)" ]; then
echo "PID $PID belongs to container $container"
break
fi
fi
done
使用 nsenter
命令:
你可以使用 nsenter
命令进入容器的命名空间,并检查目标进程是否存在于该命名空间中。
PID=12345 # 替换为你要查找的进程 PID
for container in $(docker ps -q); do
container_pid=$(docker inspect --format '{{.State.Pid}}' $container)
if nsenter --target $container_pid --pid -- ls /proc | grep -w $PID > /dev/null 2>&1; then
echo "PID $PID belongs to container $container"
break
fi
done
本实践将在 Ubuntu 22.04.3LTS 系统上进行测试
docker 版本Docker Engine - Community 24.0.6
,原则上docker版本无影响
docker 查看运行日志是检查服务必备知识。当随着日志越来越多,精确定位日志就变得很困难。
本记录就记录下查看docker日志的常用手段和方法。
本实践将在 Ubuntu 22.04.3LTS 系统上进行安装测试
docker 版本Docker Engine - Community 24.0.6
,原则上docker版本无影响
某一天,k8s频频报磁盘压力,去服务器上一看,99%的磁盘使用,显然目前的磁盘空间不足,需要更大的磁盘承载资料。
过了一段时间,新磁盘终于到了,并成功挂载到服务器上。目录为/data
, 容量为原来的10倍,终于可以开心的玩耍了。