我在EC2实例上运行了气流,我正在安排一些启动Docker容器的任务。我怎么做?我需要在我的气流容器上安装docker吗?接下来的步骤是什么?我有一个yaml文件,我用它来旋转容器,它来自puckel / airflow Docker图像
答案 0 :(得分:4)
终于解决了
我的EC2设置正在运行unbuntu Xenial 16.04并使用正在运行气流的puckel / airflow docker镜像修改
您需要在Dockerfile中更改的内容
在Dockerfile顶部添加USER root
USER root
安装docker bin对我不起作用,所以我不得不安装
docker binary in my docker container
从Docker Inc.存储库安装Docker。
RUN curl -sSL https://get.docker.com/ | sh
在互联网上搜索wrapdocker文件。将其复制到Dockerfile所在文件夹的scripts目录中。这将启动airflow docker中的docker守护程序
安装魔术包装
ADD ./script/wrapdocker /usr/local/bin/wrapdocker
RUN chmod +x /usr/local/bin/wrapdocker
将气流作为用户添加到泊坞窗组,以便气流可以运行泊坞窗作业
RUN usermod -aG docker airflow
切换到气流用户
USER airflow
Docker将文件或命令行参数组合到docker run
将docker air flow从docker airflow安装到刚刚安装的docker镜像
- /var/run/docker.sock:/var/run/docker.sock
你应该好好去!
答案 1 :(得分:1)
您可以通过将卷附加到容器来从气流泊坞器容器中启动泊坞窗容器。
示例:
docker run -v /var/run/docker.sock:/var/run/docker.sock:ro -v /path/to/bin/docker:/bin/docker:ro your_airflow_image
您可能还需要附加docker所需的一些库。这取决于您运行Docker的系统。只需阅读在容器内运行docker命令时获得的错误消息,它将指示您需要附加的内容。
您的气流容器将可以完全访问在主机上运行的Docker。 因此,如果启动docker容器,它们将在运行气流容器的主机上运行。
答案 2 :(得分:1)
我有一个更简单的解决方案,它只需要一个短的Dockerfile即可构建派生映像:
FROM puckel/docker-airflow
USER root
RUN groupadd --gid 999 docker \
&& usermod -aG docker airflow
USER airflow
然后
docker build -t airflow_image .
docker run -v /var/run/docker.sock:/var/run/docker.sock:ro \
-v /usr/bin/docker:/bin/docker:ro \
-v /usr/lib/x86_64-linux-gnu/libltdl.so.7:/usr/lib/x86_64-linux-gnu/libltdl.so.7:ro \
-d airflow_image