Podman 迁移笔记

最近把各个服务从 Debian 迁移到 Archlinux,顺便把 Docker+Compose 换成 Podman(无根)+Quadlet,期间遇到了一些奇怪问题,记录一下。 当 compose 中有容器间的依赖关系时,podlet compose –pod 生成的配置无法正常工作 podlet 生成时会将依赖关系转换为: [Unit] Requires=redis.service After=redis.service 但是其中缺少了 pod 名称,导致 systemd 无法正确启动依赖的容器。 正确格式应该为: [Unit] Requires=<pod名>-redis.service After=<pod名>-redis.service 这是 podlet(0.3.0 - 2024-05-21) 的 BUG,Github 代码中已经修复了,但是没有发布新版本。 可以手动修改 Quadlet 文件或者编译源码。 当然如果不使用 pod 就没有这个问题了。 同网络中的容器无法通过容器名互相访问 这是由于 Quadlet 文件被转换成 systemd unit 文件时,容器名称前面被自动添加了 systemd-。 name: comentario services: comentario: restart: unless-stopped image: registry.gitlab.com/comentario/comentario environment: BASE_URL: https://comment.nite07.com SECRETS_FILE: /secrets.yaml ports: - 8820:80 volumes: - ./secrets.yaml:/secrets.yaml:ro depends_on: - comentario-db labels: - "io.containers.autoupdate=registry" networks: - comentario_network comentario-db: restart: unless-stopped image: docker.io/library/postgres:16-alpine environment: POSTGRES_DB: comentario POSTGRES_USER: postgres POSTGRES_PASSWORD: postgres volumes: - ./postgres:/var/lib/postgresql/data labels: - "io.containers.autoupdate=registry" networks: - comentario_network networks: comentario_network: driver: bridge 例如在上面的例子中 comentario 容器内要通过 systemd-comentario-db 访问 comentario-db 容器。 ...

一月 19, 2025 · Nite