由于基于python:3.8-slim-buster的映像上存在操作系统漏洞,我正在尝试基于redhat ubi8映像进行构建。
我用以下dockerfile成功构建了图像:
FROM registry.access.redhat.com/ubi8/python-38:1-107
ARG AIRFLOW_VERSION=2.4.1
ARG AIRFLOW_USER_HOME=/usr/local/airflow
ENV AIRFLOW_HOME=${AIRFLOW_USER_HOME}
RUN pip install -U pip setuptools wheel &&
pip install 'apache-airflow[crypto,celery,postgres,hive,jdbc]==2.4.1'
--constraint "https://raw.githubusercontent.com/apache/airflow/constraints-2.4.1/constraints-3.8.txt"
COPY bin/start.sh /start.sh
COPY airflow/airflow.cfg /usr/local/airflow/airflow.cfg
USER root
RUN useradd -ms /bin/bash -d /usr/local/airflow airflow &&
chown -R airflow: /usr/local/airflow &&
chown -R airflow: /opt/app-root
USER airflow
COPY airflow/dags /usr/local/airflow/dags
COPY requirements.txt /tmp/requirements.txt
COPY entrypoint.sh /entrypoint.sh
RUN /entrypoint.sh install
SHELL ["/bin/bash", "-c"]
EXPOSE 8080 5555 8793
USER airflow
WORKDIR ${AIRFLOW_USER_HOME}
ENTRYPOINT /entrypoint.sh start
然而,当我尝试在与之前基于debian的映像相同的docker compose设置中运行新映像时,我的容器无法连接到postgresql数据库。
它似乎试图连接到postgres数据库:AIRFLOW__CORE_SQL_ALCHEMY_CONN=postgresql+psycopg2://气流:airflow@label-postgres:5432/气流它被困在等待中:等待Postgres(标签Postgres:5432(。。。4/20
这不是docker compose的配置问题,DB可以从容器中完全访问。以前基于Debian的图像构建,在相同的设置下工作时没有问题。
有人知道Redhat是否有某些特定行为阻碍了连接吗?或者如果我的档案有问题?
这在Dockerfile中修复了它:
yum install -y nc
连接问题是由于基本映像上没有netcat。在连接到DB Airflow之前,尝试使用netcat获取数据库,如果命令不可用,它不会返回错误,只是说它正在等待数据库