为何Podman Compose不支持`include`顶级元素?拆分配置后仅启动单容器
问题:Podman-Compose 仅启动主Compose文件中的容器,忽略
include引入的文件 环境信息
- 系统:Fedora 39
- Podman版本:4.9.0
- Podman-Compose版本:1.0.6
问题重现
将单份Docker Compose文件拆分为多文件后,使用docker compose up启动时,仅加载主文件docker-compose.yaml中的hello容器,include引入的docker-compose2.yaml中的world容器未被启动。
拆分前配置(正常运行)
before-split-docker-compose.yaml:
version: '3.8' services: hello: image: docker/whalesay command: cowsay hello world: image: docker/whalesay command: cowsay world
拆分后配置
docker-compose.yaml:
version: '3.8' include: - docker-compose2.yaml services: hello: image: docker/whalesay command: cowsay hello
docker-compose2.yaml:
version: '3.8' services: world: image: docker/whalesay command: cowsay world
执行日志片段
[kunalsharma@fedora learnDockerCompose]$ docker compose up >>>> Executing external compose provider "/usr/bin/podman-compose". Please refer to the documentation for details. <<<< podman-compose version: 1.0.6 # ... 省略中间日志 ... podman start -a learndockercompose_hello_1 [hello] | _______ [hello] | < hello > [hello] | ------- # ... hello容器输出 ... exit code: 0
原因分析
Podman-Compose 1.0.6版本不支持Docker Compose v2.20+引入的include语法,这个include是Docker Compose原生新增的功能,旧版podman-compose尚未实现该特性,因此会直接忽略include字段,仅处理当前指定的Compose文件。
解决方案
方案1:显式指定所有Compose文件启动
Podman-Compose支持通过-f参数指定多个Compose文件,启动时显式传入所有需要加载的文件即可:
# 直接使用podman-compose命令 podman-compose -f docker-compose.yaml -f docker-compose2.yaml up # 或使用docker别名(如果已配置) docker compose -f docker-compose.yaml -f docker-compose2.yaml up
方案2:升级Podman-Compose到支持include的版本
Podman-Compose 2.0及以上版本已支持include语法,可通过pip升级到最新版:
pip install --user podman-compose --upgrade
升级完成后,直接执行docker compose up或podman-compose up即可自动加载include指定的文件。
验证
执行对应启动命令后,应该能看到hello和world两个容器的启动日志,同时通过podman ps -a可确认两个容器都已创建并运行。
内容的提问来源于stack exchange,提问作者Kunal Sharma
相关产品推荐
相关产品推荐

