python - 从 Airflow 创建 Docker 容器,其中 Airflow 本身位于容器中(因为 Windows 10)。我错过了什么?
问题描述
我有一个简单的示例 python 脚本,我希望 Airflow 按计划运行。我可以为 Airflow 创建容器并在此容器中成功安装 Docker 服务器。我可以手动访问 CLI 和“docker run”示例的容器并且它可以工作。当我从 localhost 管理员尝试它时,它只会说“正在运行”。在 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"]
要创建 Airflow 容器,我使用这个 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"]
)
我在命令和入口点周围尝试了很多变化,但无济于事。非常感谢。
解决方案
好的,所以这有点尴尬。我没有在 localhost 管理员中将开关切换到“开”。
推荐阅读
- c++ - 如何在 C++ DLL 项目中使用第 3 方 DLL?
- cloud-foundry - 计划重启 Pivotal Cloud Foundry 上的应用程序
- gulp - 如何创建全局模式以访问所有子文件夹及其自己的文件夹?
- amazon-web-services - 如何在 aws 宕机时创建场景
- c# - Assembly.LoadFrom 类型加载不一样
- yocto - bitbake do_image 依赖项未缓存
- json - 有没有人有脚本可以将带有 [sub]*folders 的 Chrome 书签文件转换为 CVS 文件?
- node.js - node-sqlite3 中的事务
- c# - 更改 XML 标记前缀 SOAP
- php - PHP 如何使用我的选择来更改值?