如何通过Docker Compose复制文件供Stoplight Prism访问?
解决Stoplight Prism Docker Compose路径匹配问题
问题根源
Stoplight Prism官方镜像的默认工作目录是/usr/src/prism/packages/cli,执行prism mock时,它会基于这个目录查找指定的API文档路径。你当前挂载./reference/:/app/,且Dockerfile将仓库复制到/app,但Prism实际在/usr/src/prism/packages/cli/app/目录下查找文件,路径不匹配导致报错。
解决方案
方案1:调整挂载路径匹配Prism查找目录
修改docker-compose.yaml的volumes配置,将本地reference目录直接挂载到Prism预期的路径下:
services: prism: # 保留原有镜像、端口等配置 volumes: - ./reference/:/usr/src/prism/packages/cli/app/reference/ command: prism mock app/reference/Offers/Offers-APIs.v1.json
本地reference文件夹会被映射到Prism工作目录下的app/reference,与报错中的路径完全对应,Prism即可找到目标文件。
方案2:指定容器工作目录并修正命令路径
若希望保留/app作为文件存放目录,可在docker-compose.yaml中指定工作目录,同时调整prism mock的目标路径:
services: prism: # 保留原有镜像、端口等配置 working_dir: /app volumes: - ./reference/:/app/reference/ command: prism mock reference/Offers/Offers-APIs.v1.json
将工作目录切换到/app后,Prism会基于/app查找你指定的相对路径,挂载目录也能准确对应。
方案3:移除挂载,直接使用Dockerfile复制的文件
如果不需要实时修改API文档文件,可直接去掉volumes挂载配置——你的Dockerfile已将整个仓库复制到/app,此时直接使用容器内的绝对路径执行命令即可:
services: prism: # 保留原有镜像、端口等配置 command: prism mock /app/reference/Offers/Offers-APIs.v1.json
这种方式无需挂载,直接使用镜像中已有的文件,避免路径冲突。
内容的提问来源于stack exchange,提问作者qli
相关产品推荐
相关产品推荐

