|
29 | 29 | --mount=type=bind,target=uv.lock,src=uv.lock \ |
30 | 30 | --mount=type=bind,target=pyproject.toml,src=pyproject.toml \ |
31 | 31 | $PIP_SECRET_MOUNT \ |
32 | | - uv sync $PIP_INSTALL_ARGS |
| 32 | + uv sync $PIP_INSTALL_ARGS && \ |
| 33 | + chown -R flytekit /root/.venv |
33 | 34 | WORKDIR / |
34 | 35 |
|
35 | 36 | # Update PATH and UV_PYTHON to point to the venv created by uv sync |
|
54 | 55 | --mount=type=bind,target=poetry.lock,src=poetry.lock \ |
55 | 56 | --mount=type=bind,target=pyproject.toml,src=pyproject.toml \ |
56 | 57 | $PIP_SECRET_MOUNT \ |
57 | | - poetry install $PIP_INSTALL_ARGS |
58 | | -
|
| 58 | + poetry install $PIP_INSTALL_ARGS && \ |
| 59 | + chown -R flytekit /root/.venv |
59 | 60 | WORKDIR / |
60 | 61 |
|
61 | 62 | # Update PATH and UV_PYTHON to point to venv |
62 | | -ENV PATH="/root/.venv/bin:$$PATH" \ |
| 63 | +ENV PATH="/root/.venv/bin:$$PATH" \ |
63 | 64 | UV_PYTHON=/root/.venv/bin/python |
64 | 65 | """ |
65 | 66 | ) |
|
81 | 82 | $APT_PACKAGES |
82 | 83 | """) |
83 | 84 |
|
| 85 | +# make sure that micromamba python installation is owned by flytekit user |
84 | 86 | MICROMAMBA_INSTALL_COMMAND_TEMPLATE = Template("""\ |
85 | 87 | RUN --mount=type=cache,sharing=locked,mode=0777,target=/opt/micromamba/pkgs,\ |
86 | 88 | id=micromamba \ |
87 | 89 | --mount=from=micromamba,source=/usr/bin/micromamba,target=/usr/bin/micromamba \ |
88 | 90 | micromamba config set use_lockfiles False && \ |
89 | | - micromamba create -n runtime --root-prefix /opt/micromamba \ |
| 91 | + ( micromamba create -n runtime --root-prefix /opt/micromamba \ |
| 92 | + -c conda-forge $CONDA_CHANNELS \ |
| 93 | + python=$PYTHON_VERSION $CONDA_PACKAGES \ |
| 94 | + || micromamba install -n runtime --root-prefix /opt/micromamba \ |
90 | 95 | -c conda-forge $CONDA_CHANNELS \ |
91 | | - python=$PYTHON_VERSION $CONDA_PACKAGES |
| 96 | + python=$PYTHON_VERSION $CONDA_PACKAGES ) && \ |
| 97 | + chown -R flytekit /opt/micromamba |
92 | 98 | """) |
93 | 99 |
|
94 | 100 | DOCKER_FILE_TEMPLATE = Template("""\ |
|
98 | 104 |
|
99 | 105 | FROM $BASE_IMAGE |
100 | 106 |
|
| 107 | +WORKDIR / |
101 | 108 | USER root |
102 | 109 | $APT_INSTALL_COMMAND |
103 | 110 | RUN --mount=from=micromamba,source=/etc/ssl/certs/ca-certificates.crt,target=/tmp/ca-certificates.crt \ |
|
118 | 125 | SSL_CERT_DIR=/etc/ssl/certs \ |
119 | 126 | $ENV |
120 | 127 |
|
121 | | -$UV_PYTHON_INSTALL_COMMAND |
| 128 | +$PYTHON_INSTALL_COMMAND |
122 | 129 |
|
123 | 130 | # Adds nvidia just in case it exists |
124 | 131 | ENV PATH="$$PATH:/usr/local/nvidia/bin:/usr/local/cuda/bin" \ |
@@ -336,7 +343,7 @@ def create_docker_context(image_spec: ImageSpec, tmp_dir: Path): |
336 | 343 | ) |
337 | 344 | raise ValueError(msg) |
338 | 345 |
|
339 | | - uv_python_install_command = prepare_python_install(image_spec, tmp_dir) |
| 346 | + python_install_command = prepare_python_install(image_spec, tmp_dir) |
340 | 347 | env_dict = {"PYTHONPATH": "/root"} |
341 | 348 |
|
342 | 349 | if image_spec.env: |
@@ -422,11 +429,11 @@ def create_docker_context(image_spec: ImageSpec, tmp_dir: Path): |
422 | 429 | _f_img_id_env = f"{_F_IMG_ID}={image_spec.id}" |
423 | 430 |
|
424 | 431 | docker_content = DOCKER_FILE_TEMPLATE.substitute( |
425 | | - UV_PYTHON_INSTALL_COMMAND=uv_python_install_command, |
426 | | - APT_INSTALL_COMMAND=apt_install_command, |
427 | 432 | INSTALL_PYTHON_TEMPLATE=python_install_template.template, |
428 | 433 | EXTRA_PATH=python_install_template.extra_path, |
429 | 434 | PYTHON_EXEC=python_install_template.python_exec, |
| 435 | + APT_INSTALL_COMMAND=apt_install_command, |
| 436 | + PYTHON_INSTALL_COMMAND=python_install_command, |
430 | 437 | BASE_IMAGE=base_image, |
431 | 438 | ENV=env, |
432 | 439 | _F_IMG_ID_ENV=_f_img_id_env, |
|
0 commit comments