当使用docker作为存储时,在调用中如下:
prefect register --project yourproject -p yourflow.py似乎perfect创建了一个tmp{randomNumber}文件夹,并放置了参与docker构建的healthcheck.py和docker文件。
但是我不小心删除了tmp文件夹,即使我恢复了它,它仍然抛出以下错误。发生的事情是Prefect期望一个以新的random_number作为后缀的tmp文件夹。我如何才能从中恢复呢?
Step 10/11 : COPY ./tmpnu2k398p/healthcheck.py /opt/prefect/healthcheck.py
COPY failed: stat /var/lib/docker/tmp/docker-builder531146691/tmpnu2k398p/healthcheck.py: no such file or directory
Error loading 'prefect_register_flow.py':
Traceback (most recent call last):
File "/Users/zhengxie1/workspace/cog_ana_model_train/venv/lib/python3.7/site-packages/prefect/cli/build_register.py", line 134, in load_flows_from_script
namespace = runpy.run_path(abs_path, run_name="<flow>")
File "/Users/zhengxie1/.pyenv/versions/3.7.3/lib/python3.7/runpy.py", line 263, in run_path
pkg_name=pkg_name, script_name=fname)
File "/Users/zhengxie1/.pyenv/versions/3.7.3/lib/python3.7/runpy.py", line 96, in _run_module_code
mod_name, mod_spec, pkg_name, script_name)
File "/Users/zhengxie1/.pyenv/versions/3.7.3/lib/python3.7/runpy.py", line 85, in _run_code
exec(code, run_globals)
File "/Users/zhengxie1/workspace/cog_ana_model_train/prefect_register_flow.py", line 77, in <module>
flow.storage.build()
File "/Users/zhengxie1/workspace/cog_ana_model_train/venv/lib/python3.7/site-packages/prefect/storage/docker.py", line 303, in build
self._build_image(push=push)
File "/Users/zhengxie1/workspace/cog_ana_model_train/venv/lib/python3.7/site-packages/prefect/storage/docker.py", line 370, in _build_image
"Your docker image failed to build! Your flow might have "
ValueError: Your docker image failed to build! Your flow might have failed one of its deployment health checks - please ensure that all necessary files and dependencies have been included.发布于 2021-12-02 11:09:02
作为一种快速修复方法,您可以禁用健康检查:
from prefect.storage import Docker
Docker(ignore_healthchecks=True)通常,看起来您在Docker容器中运行注册本身,这就是运行状况检查失败的原因。注册步骤是构建镜像,现在您正在从Docker容器构建Docker镜像,而不是从本地进程。从理论上讲,你可以用docker.sock来解决这个问题,但是有一种更简单的方法。
您可以为注册过程创建一个虚拟环境。在该环境中,您可以使用CLI一次性注册所有流,而不是使用自定义代码:
prefect register --project yourproject -p /path/to/flows/dir/然后,将逐个注册dir目录中的所有流,并且Prefect将为每个流构建自己的Docker镜像。
https://stackoverflow.com/questions/70198040
复制相似问题