在Dockerfile中为apache/airflow docker镜像安装mongo CLI


FROM apache/airflow:2.2.4
# install mongodb-org-tools - mongodb tools for up-to-date mongodb that can handle --uri=mongodb+srv: flag
RUN apt-get update && apt-get install -y gnupg software-properties-common && 
curl -fsSL https://www.mongodb.org/static/pgp/server-4.2.asc | apt-key add - && 
add-apt-repository 'deb https://repo.mongodb.org/apt/debian buster/mongodb-org/4.2 main' && 
apt-get update && 
apt-get install -y mongodb-org-tools
ADD requirements.txt /requirements.txt
RUN pip install -r /requirements.txt

我们需要能够在我们的气流项目中使用mongoDB CLI命令,如BashOperator中的mongoimportmongoexport,因为我们的工作流程涉及将数据移动到mongoDB数据库中。比起pythonpymongo包,我们更喜欢使用像mongoimport这样的mongo命令。

当我们构建镜像时,我们似乎没有安装mongo的权限-我们收到以下错误:

=> ERROR [cbb-airflow_airflow-webserver 2/4] RUN apt-get update && apt-get install -y gnupg software-properties-common &&     curl -fsSL https://www.  0.6s
------
> [cbb-airflow_airflow-webserver 2/4] RUN apt-get update && apt-get install -y gnupg software-properties-common &&     curl -fsSL https://www.mongodb.org/static/pgp/server-4.2.asc | apt-key add - &&     add-apt-repository 'deb https://repo.mongodb.org/apt/debian buster/mongodb-org/4.2 main' &&     apt-get update &&     apt-get install -y mongodb-org-tools:
#0 0.460 Reading package lists...
#0 0.592 E: List directory /var/lib/apt/lists/partial is missing. - Acquire (13: Permission denied)
------
failed to solve: executor failed running [/bin/bash -o pipefail -o errexit -o nounset -o nolog -c apt-get update && apt-get install -y gnupg software-properties-common &&     curl -fsSL https://www.mongodb.org/static/pgp/server-4.2.asc | apt-key add - &&     add-apt-repository 'deb https://repo.mongodb.org/apt/debian buster/mongodb-org/4.2 main' &&     apt-get update &&     apt-get install -y mongodb-org-tools]: exit code: 100

对于mongoimport这样的命令,使用官方的apache/airflow docker映像安装mongo CLI的最佳方式是什么?

FROM语句之后添加USER root

更新后的Dockerfile将如下所示:

FROM apache/airflow:2.2.4
USER root
# install mongodb-org-tools - mongodb tools for up-to-date mongodb that can handle --uri=mongodb+srv: flag
RUN apt-get update && apt-get install -y gnupg software-properties-common && 
curl -fsSL https://www.mongodb.org/static/pgp/server-4.2.asc | apt-key add - && 
add-apt-repository 'deb https://repo.mongodb.org/apt/debian buster/mongodb-org/4.2 main' && 
apt-get update && 
apt-get install -y mongodb-org-tools
ADD requirements.txt /requirements.txt
RUN pip install -r /requirements.txt

TL;DR

apache/airflow:2.2.4Docker镜像中,用户被设置为airflow(id 5000(。我们可以通过查看Dockerfile中的第49条指令来确认这一点。

现在,当您尝试运行任何命令时,它都将使用具有受限访问权限的airflow用户运行。

为了克服这个问题,您需要在构建Docker映像时显式切换到root用户。这将解决所有与权限相关的问题。

最新更新