Docker 如何在不手动运行DBT deps的情况下配置DBT依赖项?

Docker 如何在不手动运行DBT deps的情况下配置DBT依赖项?,docker,dbt,Docker,Dbt,我是DBT新手,目前正在尝试构建一个Docker容器,可以在其中直接运行DBT命令。我有一个导出环境变量(envs.sh)的文件,该文件如下所示: packages: - package: fishtown-analytics/dbt_utils version: 0.6.2 export DB_HOST=“secret” export DB_PWD=“evenabiggersecret” 我的packages.yml看起来像: packages: - package: fi

我是DBT新手,目前正在尝试构建一个Docker容器,可以在其中直接运行DBT命令。我有一个导出环境变量(
envs.sh
)的文件,该文件如下所示:

packages:
  - package: fishtown-analytics/dbt_utils
    version: 0.6.2
export DB_HOST=“secret” export DB_PWD=“evenabiggersecret” 我的
packages.yml
看起来像:

packages:
  - package: fishtown-analytics/dbt_utils
    version: 0.6.2
我的docker文件结构如下:

来自fishtownanalytics/dbt的
:0.19.0b1
#定义工作目录
WORKDIR/usr/app/profile/
环境数据库目录/usr/app
环境数据库配置文件目录/usr/app
#加载环境变量
复制./dbt${dbt_DIR}
#加载环境变量并安装软件包
复制envs.sh envs.sh
跑/环境卫生署\
&&dbt deps#导出环境以避免安装deps时出现配置文件未找到错误
但是,当我在docker容器中运行
dbt run
时,我得到了错误:
“dbt_utils”未定义
。当我手动运行
dbt-deps
时,它似乎解决了问题,并且
dbt-run
成功。我最初安装依赖项时是否遗漏了什么

更新:
换句话说,在构建Docker映像时运行
DBTDeps
似乎没有任何效果。因此,在开始执行工作流之前,我必须手动运行它(例如,当我运行docker时)。当我使用Python映像(而不是fishtown analytics中的映像)时,不会发生此问题。

运行
dbt deps
是准备dbt环境的必要步骤,因此在
dbt运行之前调用
Dockerfile
中的
dbt deps
应该感觉良好

然而,我认为,您的意图是在最后一行的
RUN
指令中迷失:要么最后一行
RUN
命令应转换为
CMD
指令,要么您可以在之前自行执行
RUN dbt depts
。(有关
RUN
CMD
之间差异的更多详细信息,请参阅)

而且,值得一提的是:dbt Cloud是一个托管的用于dbt的SaaS构建环境,它也将运行
dbt deps
作为所有dbt构建作业的标准步骤之一——这意味着每次都在运行时执行,类似于Docker的
CMD

@alt-f4

dbt deps
的基本原理是将包的本地副本安装到
project/dbt\u modules/
目录中

默认情况下,该目录包含在.gitignore中,因此可以尝试:

  • .gitignore
  • 通过dbt deps安装到repo
  • 将该版本的模块提交到您的repo中

  • 可能会起作用,但如果您这样做,我建议在packages.yml中锁定每个包的版本。

    Hi Nick=)我遇到的问题是,在Dockerfile中运行
    dbt deps
    似乎没有效果。我需要在运行容器时手动运行。然而,当我使用Python映像并安装dbt时,它似乎在那里工作。我还更新了我的问题,以便更好地说明problem@alt-f4我相应地更新了答案-让我知道这是否有帮助!我认为上次运行
    后映像的状态就是没有被“提交”,因此就好像
    dbt deps
    从未运行过一样。。。