在Docker中运行自定义OpenAPI生成器的问题及解决方案
在Docker中运行自定义OpenAPI生成器的问题及解决方案
我自己参考OpenAPI文档和网上的一些指南,开发了一个自定义的API文件生成器,本地测试下来功能都正常。但现在遇到个问题——我想通过Docker运行带这个自定义生成器插件的OpenAPI生成器,却找不到相关的指南或文档。我理想中的命令大概是这样的:
docker run --rm \ -v ${PWD}:/local \ openapitools/openapi-generator-cli generate \ -i /local/index.yaml \ -g ?? \ -o /local/out/go
如果直接用官方镜像不行的话,我也可以接受用Dockerfile来实现,有没有朋友能给点建议?
解决方案:自定义Docker镜像打包自定义生成器
我自己折腾出了一个可行的方案,通过编写Dockerfile把OpenAPI生成器CLI和自定义生成器打包成一个独立镜像,具体步骤如下:
1. 编写Dockerfile
创建如下Dockerfile,将自定义生成器jar包与OpenAPI生成器CLI整合:
FROM openjdk:11-jre-slim USER root RUN apt-get update && apt-get install -y wget ARG ARG_OPENAPI_GENERATOR_VERSION={{version}} ENV OPENAPI_GENERATOR_VERSION=${ARG_OPENAPI_GENERATOR_VERSION} WORKDIR /app RUN wget https://repo1.maven.org/maven2/org/openapitools/openapi-generator-cli/${ARG_OPENAPI_GENERATOR_VERSION}/openapi-generator-cli-${ARG_OPENAPI_GENERATOR_VERSION}.jar -O openapi-generator-cli.jar COPY {{path_to_your_custom_generator}}.jar ./ ENTRYPOINT ["java", "-cp", "{{your_custom_generator}}.jar:openapi-generator-cli.jar", "org.openapitools.codegen.OpenAPIGenerator"]
提示:记得把
{{version}}(OpenAPI生成器版本)、{{path_to_your_custom_generator}}(自定义生成器jar包本地路径)、{{your_custom_generator}}(自定义生成器jar包文件名)这些占位符替换成你自己的实际信息。
2. 构建自定义Docker镜像
执行以下命令构建镜像,替换占位符为你的实际值:
docker build --build-arg ARG_OPENAPI_GENERATOR_VERSION={{open-api-version}} -t {{image_tag}} -f {{path_to_dockerfile}} .
{{open-api-version}}:你要使用的OpenAPI生成器具体版本号{{image_tag}}:给你的镜像设置一个标签(比如my-custom-openapi-gen){{path_to_dockerfile}}:Dockerfile的本地路径(如果在当前目录下可省略-f参数)
3. 运行镜像生成代码
镜像构建完成后,就可以用它来执行代码生成命令了:
docker run -v {{source_dir}}:/local --rm {{image_tag}} \ generate \ -g {{custom_generator_name}} \ -i /local/{{path_to_api_bundle.yaml}} \ -o /local/{{path_to_destination_output}}
{{source_dir}}:本地存放API YAML文件的目录,会被挂载到容器的/local目录{{image_tag}}:刚才构建的自定义镜像标签{{custom_generator_name}}:你的自定义生成器的名称(即代码中定义的generator标识){{path_to_api_bundle.yaml}}:API YAML文件在本地source_dir中的相对路径{{path_to_destination_output}}:生成代码在本地的输出目录(对应容器内/local下的路径)
内容来源于stack exchange




