Docker环境下Kettle容器API路径http://kettletdf:8000/etl/v1/eph/enriched/listar 疑问
关于API路径http://kettletdf:8000/etl/v1/eph/enriched/listar的来源分析
我了解Docker/ETL/Pentaho相关概念,但对路径http://kettletdf:8000/etl/v1/eph/enriched/listar存在疑惑:已知kettletdf是容器名称,但/etl/v1/eph/enriched/listar并非本地文件夹。该请求来自以下Python代码:
response = requests.get(etl_baseurl + etl_version + etl_fuente + folder + "/listar", timeout=settings.REQUEST_EPH_TIMEOUT) data = response.json()
对应的Docker Compose配置如下:
services: kettletdf: build: context: ../../ dockerfile: etl/kettle/Dockerfile args: GIT_BRANCH: ${GIT_BRANCH} GIT_USER: ${GIT_USER} GIT_PASS: ${GIT_PASS} GIT_REPO: ${GIT_REPO} env_file: - .env stdin_open: true tty: true container_name: kettletdf #ports: #- "${KETTLE_PORT}:8000" environment: - POSTGRES_HOST=${POSTGRES_HOST} - POSTGRES_PORT=${POSTGRES_PORT} - POSTGRES_NAME=${POSTGRES_NAME} - POSTGRES_USER=${POSTGRES_USER} - POSTGRES_PASSWORD=${POSTGRES_PASSWORD} - CSV_VOLUME_FULLPATH=${CSV_VOLUME_FULLPATH} volumes: #AGREGAR RUTAS DE ARCHVISPOS FAÑLTANTES (ETC/SALUD/ORIGINFILES ... COMERCIO ,....ETC) - /var/run/docker.sock:/var/run/docker.sock - ../eph/eph_csv_origin_file:/opt/tdf/volumes/eph_csv_origin_file/ - ../eph/eph_csv_master_file:/opt/tdf/volumes/eph_csv_master_file/ - ../eph/eph_csv_enriched_file:/opt/tdf/volumes/eph_csv_enriched_file/ - ../eph/eph_csv_cuadros_resultado:/opt/tdf/volumes/eph_csv_cuadros_resultado/ - ../eph/sintaxis_r_resultado:/opt/tdf/volumes/sintaxis_r_resultado/ - ../eph/sintaxis_r_resultado:/opt/tdf/datalaketdf/etl/eph/sintaxis_r_resultado/ # Queda comentado para que no pise los scripts dentro de eph #- ../eph/:/opt/tdf/datalaketdf/etl/eph/ - ../eph/bdd/scripts/:/opt/tdf/volumes/scripts/ - ../salud/:/opt/tdf/datalaketdf/etl/salud/ - ../salud/bdd/scripts/:/opt/tdf/volumes/salud_scripts/ # Actualizar cada vez que se quiera agregar / quitar una carpta dentro de KETTER - /opt/tdf/volumes/salud_archivos/xls_origin_file - /opt/tdf/volumes/comercio_exterior/origen - /opt/tdf/volumes/comercio_exterior/nomencladores # Actualizar cada vez que se quiera agregar / quitar una carpta dentro de KETTER # Queda comentado por que saca el codigo del repo en git #- ../api:/opt/tdf/datalaketdf/etl/api networks: - datalaketdf networks: datalaketdf: external: true
路径来源分析
这是HTTP API路由而非文件路径:
/etl/v1/eph/enriched/listar不是本地文件夹路径,而是kettletdf容器内运行的Web服务定义的API端点,从代码中response.json()可以看出,该端点用于返回JSON格式的数据。服务的部署来源:
- 从Docker Compose的
build配置可知,kettletdf容器基于../../目录下的etl/kettle/Dockerfile构建,构建过程会通过GIT_REPO等参数从指定Git仓库拉取代码。 - 被注释的
../api:/opt/tdf/datalaketdf/etl/api卷映射提示,API代码可能原本存放在本地../api目录,或是从Git仓库拉取到容器内的/opt/tdf/datalaketdf/etl/api路径下,这个API服务会监听容器的8000端口,处理/etl/v1/eph/enriched/listar这类路由请求。
- 从Docker Compose的
路由的定义位置:
- 你需要查看构建时拉取的Git仓库代码,或是原本的
../api目录中的代码(如果未注释卷映射的话),找到Web服务的路由配置文件。这类路由通常在Flask、FastAPI等API框架的代码中定义,对应处理listar(西班牙语“列表”)的逻辑,大概率是返回eph模块下enriched相关的文件列表或数据记录。
- 你需要查看构建时拉取的Git仓库代码,或是原本的
容器网络访问逻辑:
- 因为
kettletdf和发起请求的Python服务都在datalaketdf这个外部Docker网络中,所以可以直接通过容器名称kettletdf访问其8000端口,无需映射宿主机端口(Docker Compose中端口映射被注释,但容器内部服务仍在8000端口运行)。
- 因为
内容的提问来源于stack exchange,提问作者nepko
相关产品推荐
相关产品推荐

