我有一个运行 docker 的 LXC 容器。许多容器正在成功运行,但我无法添加更多容器;我正在尝试部署一个新的 docker 容器并收到以下错误:
container init caused "join session keyring: create session key: disk quote exceeded": unknown
Run Code Online (Sandbox Code Playgroud)
但容器有足够的可用空间,主机也有。我用df -hand确认了这一点df -i(所以,它不是索引节点)
这个错误是什么意思以及如何解决?
当我跑步时podman container kill -a,我得到
can only kill running containers. 11d887d57069b3ee630fd6f1b13d600485c34f5020ff09fec65f4e31dd7242a5 is in state configured: container state improper
can only kill running containers. 2132c0543eedbe3c4ee8680da508fea6251d38107d5e707f260eb5aa8549409d is in state configured: container state improper
can only kill running containers. 2db317cc73ec92e434fda88653f872e4c4cf07e9f32c0c29ecc5e69515beb96d is in state exited: container state improper
can only kill running containers. 465d133dec7a568bd8a6231036e1c489b6a6f88c65154629d75ce4161fb6e3c4 is in state exited: container state improper
Run Code Online (Sandbox Code Playgroud)
随后的运行仍然显示容器。我怎样才能摆脱它们?
我想做一些奇怪的容器,我的任务之一是替换uname二进制文件。
我编码它:
#include <stdio.h>
int main() {
printf("This is a fake uname\n");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
编译它:
gcc uname.c -o uname
Run Code Online (Sandbox Code Playgroud)
当我在我的 ubuntu 上运行它时它工作正常。
我创建了一个Dockerfile并将其复制到图像中:
cat > Dockerfile <<EOF
FROM alpine:latest
RUN rm /bin/uname
COPY uname /bin/
ENTRYPOINT sh;
WORKDIR /home
EOF
Run Code Online (Sandbox Code Playgroud)
并建造它 docker build -t myimage -f Dockerfile .
当我运行图像时:
docker run -it --rm myimage
Run Code Online (Sandbox Code Playgroud)
该文件存在,但是当我尝试运行它时,它写入它不存在:
/home # uname
sh: uname: not found
/home # ls -lia uname
ls: uname: No such file or directory
/home …Run Code Online (Sandbox Code Playgroud) 我编写了一些 Java 桌面应用程序,并认为我可以使用 Docker 运行它们来了解容器。
我将 Java 应用程序放入带有 ubuntu 映像的 Docker 容器中。就在那时,我意识到我需要让 Docker 能够访问我的 DISPLAY 变量,以便 GUI 能够工作/访问我的计算机的 I/O。连接后,我可以运行 docker 容器并在计算机屏幕上看到 GUI 弹出。
这就是我开始感到困惑的地方。如果我在 VirtualBox 中运行桌面 GUI,我可以在虚拟机中看到 GUI;它在虚拟计算机上。然后有一些智能设备可以将虚拟机 I/O 连接到本地计算机的 I/O。这对我来说很有意义。
但是 Docker 如何将 GUI 返回到我的实际计算机上呢?当我运行容器时,我可以在我的实际计算机上看到 GUI(而不是在像 virtualbox 这样的虚拟机中)。但是 GUI 本身如何在主机上呈现呢?当我与主机共享 I/O 时,Docker 是否有权将 GUI 文件发送回主机以显示 GUI?或者当我使用 ubuntu 映像创建容器时,我基本上创建了一个虚拟机吗?
我为我的 Raspberry Pi 4 构建了一个小型 ASP.NET Core 应用程序,它可以让我控制风扇(请参阅此处)。该应用程序部署为一个小型独立 Linux 应用程序,在我的 Raspi 裸机上运行。
为了测量温度,我调用vcgencmd measure_temp了 Raspi,它为我提供了实际温度。
由于各种原因,我更喜欢在 Docker 容器中运行此应用程序:
--restart-always可以处理这个问题。但我不知道如何从容器内检索 Raspi 的温度。
我已经尝试将 Raspi 的目录映射到 Docker 容器并从内部调用/usr/bin/-但由于缺少依赖项而失败。
我已经在 Stack Overflow 上找到了一个答案,建议在 Raspi 上创建一个命名管道,然后从容器内使用该管道。但是,如果我必须设置诸如命名管道之类的东西,这就会消除容器的美感。/opt/vc/bin/vcgencmd
长话短说:有没有办法从 Docker 容器内获取 Raspi 当前的 CPU 温度?
谢谢!
docker 容器是 docker daemon 所理解的概念。从 Linux 的角度来看,docker 容器是什么?
docker 容器到底是一个 cgroup 吗?或者可以通过cgroup识别?
docker 容器是否正是在容器中运行的一组进程?
如何从彼此中找出 cgroup 和容器(ID)?
谢谢。
container ×6
docker ×5
cgroups ×1
gui ×1
kill ×1
linux-kernel ×1
lxc ×1
podman ×1
raspberry-pi ×1