gpt4 book ai didi

docker - Airflow从私有(private)谷歌容器存储库中提取docker镜像

转载 作者:行者123 更新时间:2023-12-01 16:05:13 24 4
gpt4 key购买 nike

我正在使用https://github.com/puckel/docker-airflow运行 Airflow 的图像。我必须添加 pip install docker 才能使其支持 DockerOperator。

一切看起来都不错,但我不知道如何从私有(private)的 google docker 容器存储库中提取图像。

我尝试在 Google Cloud 连接的管理部分类型中添加连接并运行 docker 操作符。

    t2 = DockerOperator(
task_id='docker_command',
image='eu.gcr.io/project/image',
api_version='2.3',
auto_remove=True,
command="/bin/sleep 30",
docker_url="unix://var/run/docker.sock",
network_mode="bridge",
docker_conn_id="google_con"
)

但总是出现错误...

[2019-11-05 14:12:51,162] {{taskinstance.py:1047}} ERROR - No Docker registry URL provided

我还尝试了 docker_conf_option

    t2 = DockerOperator(
task_id='docker_command',
image='eu.gcr.io/project/image',
api_version='2.3',
auto_remove=True,
command="/bin/sleep 30",
docker_url="unix://var/run/docker.sock",
network_mode="bridge",
dockercfg_path="/usr/local/airflow/config.json",

)

我收到以下错误:

[2019-11-06 13:59:40,522] {{docker_operator.py:194}} INFO - Starting docker container from image eu.gcr.io/project/image [2019-11-06 13:59:40,524] {{taskinstance.py:1047}} ERROR - ('Connection aborted.', FileNotFoundError(2, 'No such file or directory'))

我也尝试仅使用 dockercfg_path="config.json"并得到了相同的错误。

我无法真正使用 Bash Operator 尝试 docker 登录,因为它无法识别 docker 命令...

我错过了什么?

line 1: docker: command not found

t3 = BashOperator(
task_id='print_hello',
bash_command='docker login -u _json_key - p /usr/local/airflow/config.json eu.gcr.io'
)

最佳答案

airflow.hooks.docker_hook.DockerHook正在使用未配置的 docker_default 连接。

现在,在您的第一次尝试中,您为 docker_conn_id 设置了 google_con,并且抛出的错误显示该主机(注册表名称)不是“已配置。

以下是一些需要做的更改:

    DockerOperator 中传递的
  • image 参数应设置为不带 registry name 的图像标签。加上前缀。
DockerOperator(api_version='1.21',
# docker_url='tcp://localhost:2375', #Set your docker URL
command='/bin/ls',
image='image',
network_mode='bridge',
task_id='docker_op_tester',
docker_conn_id='google_con',
dag=dag,
# added this to map to host path in MacOS
host_tmp_dir='/tmp',
tmp_dir='/tmp',
)
  • 为底层 DockerHook 提供注册表名称、用户名和密码,以便在 google_con 连接中向 Docker 进行身份验证。

您可以从a service account key获取长期有效的身份验证凭据。 。对于用户名,请使用 _json_key 并在密码字段中粘贴 json key file 的内容.

Google connection for docker

以下是运行我的任务的日志:

[2019-11-16 20:20:46,874] {base_task_runner.py:110} INFO - Job 443: Subtask docker_op_tester [2019-11-16 20:20:46,874] {dagbag.py:88} INFO - Filling up the DagBag from /Users/r7/OSS/airflow/airflow/example_dags/example_docker_operator.py
[2019-11-16 20:20:47,054] {base_task_runner.py:110} INFO - Job 443: Subtask docker_op_tester [2019-11-16 20:20:47,054] {cli.py:592} INFO - Running <TaskInstance: docker_sample.docker_op_tester 2019-11-14T00:00:00+00:00 [running]> on host 1.0.0.127.in-addr.arpa
[2019-11-16 20:20:47,074] {logging_mixin.py:89} INFO - [2019-11-16 20:20:47,074] {local_task_job.py:120} WARNING - Time since last heartbeat(0.01 s) < heartrate(5.0 s), sleeping for 4.989537 s
[2019-11-16 20:20:47,088] {logging_mixin.py:89} INFO - [2019-11-16 20:20:47,088] {base_hook.py:89} INFO - Using connection to: id: google_con. Host: gcr.io/<redacted-project-id>, Port: None, Schema: , Login: _json_key, Password: XXXXXXXX, extra: {}
[2019-11-16 20:20:48,404] {docker_operator.py:209} INFO - Starting docker container from image alpine
[2019-11-16 20:20:52,066] {logging_mixin.py:89} INFO - [2019-11-16 20:20:52,066] {local_task_job.py:99} INFO - Task exited with return code 0

关于docker - Airflow从私有(private)谷歌容器存储库中提取docker镜像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58733579/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com