You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Testcontainers运行SchemaSpy容器生成文档遇容器提前停止问题求助

解决SchemaSpy容器启动后立即停止的问题

你的问题核心在于:当将SchemaSpy容器的entrypoint设为/bin/sh时,容器启动后没有持续运行的前台进程,执行完sh命令就会立即退出,导致后续exec和cp操作无法进行。以下是几种可行的解决办法:

办法一:启动容器时保持后台运行

通过让容器执行一个持续运行的命令(比如tail -f /dev/null),让容器保持存活,之后再通过exec进入容器执行操作:

  1. 启动PostgreSQL容器(示例命令):
    docker run -d --name postgres -e POSTGRES_PASSWORD=your_password -e POSTGRES_DB=target_db postgres:latest
    
  2. 启动SchemaSpy容器并保持后台运行:
    docker run -d --name schemaspy --link postgres:db schemaspy/schemaspy --entrypoint /bin/sh -c "tail -f /dev/null"
    
  3. 执行SchemaSpy生成数据库文档:
    docker exec schemaspy schemaspy -t pgsql -host db -u postgres -p your_password -db target_db -o /output
    
  4. 将生成的文档打包:
    docker exec schemaspy tar -czf /output.tar.gz /output
    
  5. 复制打包文件到本地:
    docker cp schemaspy:/output.tar.gz ./
    
  6. 完成后清理容器:
    docker rm -f schemaspy postgres
    

办法二:一次性执行完整流程(无需保持容器存活)

直接在容器启动时执行SchemaSpy生成命令+打包命令,容器执行完所有命令后会停止,但此时容器仍存在,可以直接复制文件:

  1. 启动PostgreSQL容器(同办法一)
  2. 启动SchemaSpy容器执行完整流程:
    docker run --name schemaspy --link postgres:db schemaspy/schemaspy /bin/sh -c "schemaspy -t pgsql -host db -u postgres -p your_password -db target_db -o /output && tar -czf /output.tar.gz /output"
    
  3. 复制打包文件到本地:
    docker cp schemaspy:/output.tar.gz ./
    
  4. 清理容器:
    docker rm schemaspy postgres
    

办法三:使用Docker Compose编排(适合重复执行场景)

如果需要多次执行,可以用docker-compose.yml定义服务,让SchemaSpy容器依赖PostgreSQL,并执行完整流程:

创建docker-compose.yml:

version: '3'
services:
  postgres:
    image: postgres:latest
    environment:
      POSTGRES_PASSWORD: your_password
      POSTGRES_DB: target_db
    volumes:
      - ./postgres_data:/var/lib/postgresql/data
  schemaspy:
    image: schemaspy/schemaspy
    depends_on:
      - postgres
    entrypoint: /bin/sh
    command: >
      -c "schemaspy -t pgsql -host postgres -u postgres -p your_password -db target_db -o /output && tar -czf /output.tar.gz /output"
    volumes:
      - ./output:/output  # 直接挂载本地目录,无需复制文件

执行命令:

docker-compose up

执行完成后,生成的文档和tar包会直接出现在本地的./output目录下。

内容的提问来源于stack exchange,提问作者Semyon Kirekov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 20:24:31