簡體   English   中英

從 Airflow 創建 Docker 容器,其中 Airflow 本身位於容器中(因為 Windows 10)。 我錯過了什么?

[英]Creating Docker containers from Airflow where Airflow itself is in a container (because of Windows 10). What am I missing?

我有一個簡單的示例 python 腳本,我希望 Airflow 按計划運行。 我可以為 Airflow 創建容器並在此容器中成功安裝 Docker 服務器。 我可以手動訪問 CLI 和“docker run”示例的容器並且它可以工作。 當我從本地主機管理員嘗試它時,它只是說永遠“運行”。 在 CLI 中檢查“docker ps”表明它尚未啟動容器。 我確定我錯過了一些簡單的東西,因為這里沒有太多東西可以使事情復雜化。 請幫忙!?

這是python腳本:

import time as ti

def main():
    print('TEST')
    ti.sleep(120)
    print('COMPLETE')

if __name__ == "__main__":
    main()  

和 Dockerfile 來構建它:

FROM python:3.8

WORKDIR /code

ENV PATH "$PATH:/code"

COPY docker_test.py .

CMD ["python", "docker_test.py"]

要創建氣流容器,我使用這個 Dockerfile:

# Adds Docker to puckel image
FROM puckel/docker-airflow

# Adds DAG folder to the PATH
ENV PYTHONPATH "${PYTHONPATH}:/home/python_modules:/usr/local/airflow/dags"

# Install the optional packages
COPY requirements.txt requirements.txt
USER root
RUN pip install -r requirements.txt

# Install docker inside the webserver container
RUN curl -ssl https://get.docker.com/ | sh
ENV SHARE_DIR /usr/local/share

requirements.txt 包含 docker 並且 docker run 命令是:

docker run --restart always --name airflow_container --privileged -d -p 8080:8080 -v C:/Users/myprojectfolders/shared_volumes/dags:/usr/local/airflow/dags -v //var/run/docker.sock:/var/run/docker.sock mydockerlogin/airflow:2 webserver

最后一塊拼圖是 DAG 文件:

from airflow import DAG
from airflow.operators.docker_operator import DockerOperator
from datetime import datetime, timedelta


default_args = {
    'owner': 'myname',
    'depends_on_past': False,
    'start_date': datetime(2020, 10, 10),
    'retries': 1,
    'retry_delay': timedelta(minutes=2)
}


dag = DAG(
    dag_id='docker_test',
    schedule_interval='*/5 * * * *',
    default_args=default_args    
)


task = DockerOperator(
    dag=dag,
    task_id='dockertask',
    container_name = 'dockertest',
    image='mydockerlogin/dockertest:2',
    auto_remove=False,
    docker_url='unix://var/run/docker.sock',
    command = ["python", "docker_test.py"] 
)

我在命令和入口點周圍嘗試了很多變化,但無濟於事。 非常感謝。

好吧,這有點尷尬。 我沒有在本地主機管理員中將開關切換到“開”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM