为什么 systemd-oom 是我的 podman 容器卷的所有者?

为什么 systemd-oom 是我的 podman 容器卷的所有者?

我正在尝试跑步Listmonk使用提供的 Docker 方法,但我遇到了一个与systemd-oom我难以理解的问题相关的问题。

我已将服务/var/lib/postgresql/data中的卷映射db到我的本地/srv/listmonk/data文件夹,并适当地设置了 SELinux 上下文。

问题是:一旦我运行sudo docker-compose up -d(我正在使用podman-docker),目录的所有者/srv/listmonk/data及其内的所有文件就会变成systemd-oom

应用程序运行良好,我可以访问和使用它,但我不明白这里发生了什么。我的服务器有 64GB 的 RAM,在启动可能触发的容器时,我没有看到任何使用率峰值systemd-oom。这可能是在容器内部发生的吗db

我怎样才能防止这种情况发生?

这是我的docker-compose.yml

version: "3.7"

x-app-defaults: &app-defaults
  restart: unless-stopped
  image: listmonk/listmonk:latest
  ports:
    - "9000:9000"
  networks:
    - listmonk
  environment:
    - TZ=Canada/Eastern

x-db-defaults: &db-defaults
  image: postgres:13
  ports:
    - "9432:5432"
  networks:
    - listmonk
  environment:
    - POSTGRES_PASSWORD=<...>
    - POSTGRES_USER=listmonk
    - POSTGRES_DB=listmonk
  restart: unless-stopped
  healthcheck:
    test: ["CMD-SHELL", "pg_isready -U listmonk"]
    interval: 10s
    timeout: 5s
    retries: 6

services:
  db:
    <<: *db-defaults
    container_name: listmonk_db
    volumes:
      - /srv/listmonk/data:/var/lib/postgresql/data:Z

  app:
    <<: *app-defaults
    container_name: listmonk_app
    depends_on:
      - db
    volumes:
      - /srv/listmonk/config.toml:/listmonk/config.toml:Z
      - /srv/listmonk/uploads:/listmonk/uploads

networks:
  listmonk:

答案1

当您挂载卷时,文件会在容器和主机之间共享 uid(没有用户命名空间)。因此,容器中 uid 为 999 的文件在主机上也将具有 uid 999(就像两者之间的权限位相同一样)。因此,如果容器更改其卷中文件的所有权,那么您会看到主机上的所有权按 uid 更改。您可以比较/etc/passwd容器和主机,以查看哪个主机用户映射到哪个容器用户。以下是容器中 postgres:13 图像的用户映射,您可以看到 postgres 的 uid 为 999:

root@9a946afa90cc:/# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin
irc:x:39:39:ircd:/run/ircd:/usr/sbin/nologin
_apt:x:42:65534::/nonexistent:/usr/sbin/nologin
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
postgres:x:999:999::/var/lib/postgresql:/bin/bash

相关内容