我在EC2实例上运行了气流,并且正在计划一些启动Docker容器的任务。我怎么做?我需要在气流容器上安装docker吗?接下来的下一步是什么。我有一个yaml文件,我正在使用它来旋转容器,它是从puckel / airflow Docker映像派生的
终于解决了
我的 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
你应该很高兴去!
我得到了一个更简单的解决方案,它只需要一个简短的 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)
您可以通过将卷附加到容器来从气流 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 容器,它们将在运行气流容器的主机上运行。
| 归档时间: |
|
| 查看次数: |
5198 次 |
| 最近记录: |