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
中的mongoimport
、mongoexport
,因为我们的工作流程涉及将数据移动到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.4
Docker镜像中,用户被设置为airflow
(id 5000(。我们可以通过查看Dockerfile中的第49条指令来确认这一点。
现在,当您尝试运行任何命令时,它都将使用具有受限访问权限的airflow
用户运行。
为了克服这个问题,您需要在构建Docker映像时显式切换到root
用户。这将解决所有与权限相关的问题。