[英]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.