运行Docker容器的Docker内部的气流

Ash*_*day 5 docker airflow

我在EC2实例上运行了气流,并且正在计划一些启动Docker容器的任务。我怎么做?我需要在气流容器上安装docker吗?接下来的下一步是什么。我有一个yaml文件,我正在使用它来旋转容器,它是从puckel / airflow Docker映像派生的

Ash*_*day 5

终于解决了

我的 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

在互联网上搜索 wrap docker 文件。将其复制到Dockerfile所在文件夹中的scripts目录中。这将在气流 docker 中启动 docker 守护进程

安装魔法包装器

ADD ./script/wrapdocker /usr/local/bin/wrapdocker RUN chmod +x /usr/local/bin/wrapdocker

将气流作为用户添加到 docker 组,以便气流可以运行 docker 作业

RUN usermod -aG docker airflow

切换到气流用户

USER airflow

Docker 将文件或命令行参数组合到 docker run

将 docker socket 从 docker 气流挂载到刚安装的 docker 镜像

- /var/run/docker.sock:/var/run/docker.sock

你应该很高兴去!


snt*_*nth 5

我得到了一个更简单的解决方案,它只需要一个简短的 Dockerfile 来构建派生映像:

FROM puckel/docker-airflow

USER root
RUN groupadd --gid 999 docker \
    && usermod -aG docker airflow
USER airflow
Run Code Online (Sandbox Code Playgroud)

进而

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
Run Code Online (Sandbox Code Playgroud)


Cél*_*urd 2

您可以通过将卷附加到容器来从气流 Docker 容器启动 Docker 容器。

例子:

docker run -v /var/run/docker.sock:/var/run/docker.sock:ro -v /path/to/bin/docker:/bin/docker:ro your_airflow_image
Run Code Online (Sandbox Code Playgroud)

您可能还需要附加一些 docker 所需的库。这取决于您运行 Docker 的系统。只需阅读在容器内运行 docker 命令时收到的错误消息,它会指示您需要附加的内容。

然后,您的气流容器将具有对主机上运行的 Docker 的完全访问权限。因此,如果您启动 docker 容器,它们将在运行气流容器的主机上运行。