在分离模式下启动时无法连接到 Docker 容器中运行的气流



我在一个docker容器中运行气流,使用docker Compose来启动事情。该系统由一个运行Postgres的容器和另一个运行Airflow webserver的容器组成。当我在分离模式-d下启动容器时,我无法连接到web服务器。我去了http://127.0.0.1:8080,但是什么也找不到。例子:

docker-compose --env-file .env up -d

容器正在运行。我可以查看日志docker logs airflow_webserver,我可以执行到容器和戳。

当我启动没有-d标志的容器时,它工作得很好。我可以去127.0.0.1:8080访问应用程序,没有问题。

另一个注意事项,我只有在Ubuntu的EC2实例上运行时才会遇到这个问题。在我的本地电脑(Mac)上运行没有问题。

以下是Docker -compose和Docker文件

码头工人组成

version: '3.7'
services:
postgres:
container_name: airflow_pg
image: postgres:9.6
env_file:
- ../.env
ports:
- "5432:5432"
volumes:
- "${LOCALDATABASE}:/var/lib/postgresql/data/pgdata:Z"
- ../airflow/logs:/home/airflow/logs:z
logging:
options:
max-size: 10m
max-file: "3"
webserver:
container_name: airflow_webserver
user: "${USERID}:1000"
build:
context: ../
dockerfile: airflow/DockerAirflow
args:
AIRFLOW_UID: "1000"
AIRFLOW_GID: "1000"
restart: on-failure
env_file:
- ../.env
depends_on:
- postgres
logging:
options:
max-size: 10m
max-file: "3"
volumes:
- ../airflow/dags:/opt/airflow/dags:Z
- ../airflow/logs:/opt/airflow/logs:Z
- ../app:/opt/airflow/app:Z
- "${SSHKEYPATH}:/var/ssh/cbc-pwa-us-east-2-bastion.pem:Z"
ports:
- "8080:8080"
entrypoint: /opt/airflow/start_airflow.sh
healthcheck:
test: ["CMD-SHELL", "[ -f /usr/local/airflow/airflow-webserver.pid ]"]
interval: 30s
timeout: 30s
retries: 3

Dockerfile

FROM apache/airflow:master-python3.8
USER root
RUN curl -L https://s3.amazonaws.com/redshift-downloads/drivers/odbc/1.4.17.1000/AmazonRedshiftODBC-64-bit-1.4.17.1000-1.x86_64.deb > ~/redshift.deb
RUN dpkg -i ~/redshift.deb
RUN apt update -y && sudo apt install build-essential -y
RUN sudo apt install -y procps
RUN usermod -u 1000 airflow
RUN groupmod -g 1000 airflow
RUN chown airflow:airflow /opt/airflow
COPY ./airflow/start_airflow.sh /opt/airflow/start_airflow.sh
RUN chmod a+x /opt/airflow/start_airflow.sh
USER 1000
ADD ./requirements.txt requirements.txt
RUN pip install convertdate lunarcalendar holidays tqdm pystan
RUN pip install -r requirements.txt

您可能会注意到用户组的一些奇怪之处。这部分现在可以工作了,但是使用50000作为UID的气流图像有些奇怪。由于某些原因,ARG不能接受,所以需要一些更直接的操作。我不认为这是问题所在,但我不确定是什么问题……

这可能与../airflow/logs:/opt/airflow/logs:Z卷挂载的权限有关。

当你在Mac上运行Docker时,UID总是由虚拟机翻译,但是当你直接在Linux上运行Docker容器时,容器中的UID必须与主机上可以写文件的UID:GID完全匹配。

您应该能够看到显示权限错误的日志—尝试docker logs并查看。

最新更新