如何解决将 DockerOperator 与 Airflow 结合使用时获取服务器 API 版本时出错
我正在尝试在 Airflow 中使用 DockerOperator 来运行容器。
dag 运行时,出现以下错误
2021-05-12 18:45:59,417] {taskinstance.py:1128} ERROR - Error while fetching server API version: ('Connection aborted.',FileNotFoundError(2,'No such file or directory'))
Traceback (most recent call last):
File "/home/airflow/.local/lib/python3.8/site-packages/urllib3/connectionpool.py",line 670,in urlopen
httplib_response = self._make_request(
File "/home/airflow/.local/lib/python3.8/site-packages/urllib3/connectionpool.py",line 392,in _make_request
conn.request(method,url,**httplib_request_kw)
File "/usr/lib/python3.8/http/client.py",line 1255,in request
self._send_request(method,body,headers,encode_chunked)
File "/usr/lib/python3.8/http/client.py",line 1301,in _send_request
self.endheaders(body,encode_chunked=encode_chunked)
File "/usr/lib/python3.8/http/client.py",line 1250,in endheaders
self._send_output(message_body,line 1010,in _send_output
self.send(msg)
File "/usr/lib/python3.8/http/client.py",line 950,in send
self.connect()
File "/home/airflow/.local/lib/python3.8/site-packages/docker/transport/unixconn.py",line 43,in connect
sock.connect(self.unix_socket)
FileNotFoundError: [Errno 2] No such file or directory
图像存储在 AWS ECR 中。 我使用以下命令为 ecr 生成密码:
aws ecr get-login-password --region <region-name>
我的任务配置如下:
- 变量和默认参数
docker_conn_string = "DOCKER_HUB_CONNECTION_STRING"
docker_hub_url = Variable.get("DOCKER_HUB_URL")
docker_image = docker_hub_url + '/image-name'
default_args = {
'owner': 'airflow','depends_on_past': False,'retry_delay': timedelta(minutes=1),"max_active_runs": 1,"retries": 0
}
- DAG
dag = DAG(
'do_some_work',default_args = default_args,schedule_interval = "0 0 * * *",catchup = False,)
- Docker 操作员
run_image = DockerOperator(
api_version = 'auto',docker_conn_id = docker_conn_string,auto_remove = True,# force_pull = True,command = 'command to be run',image = docker_image,task_id = 'do_work',dag = dag,start_date = datetime(2021,5,5)
)
我尝试过的东西,
- 重新检查连接字符串以使用 https 和 tcp
- 手动添加 1.21 版之前和之后的 docker 版本
- 当我使用 docker 登录凭据运行 docker pull 时,可以拉取图像,因此 EMR 密码不是问题
- 当我在本地气流实例中运行它时,如果图像已经在本地下载,它就可以工作
我的评估是在拉取 docker 操作员用来确定 docker 版本的映像之前有额外的 api,这是失败的原因,因此无法拉取映像。 我认为这可能与某些 ECR 设置有关。
这里的任何帮助将不胜感激。
谢谢
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。