Образ Docker to Apptainer/Singularity для приложения Julia: manifest_usage.toml Файловая система только для чтения

Я пытаюсь создать образ докера, который мог бы работать и в сингулярности для программного обеспечения Whippet (https://github.com/timbitz/Whippet.jl). Образ докера работает нормально, но когда я пытаюсь использовать его с сингулярностью (singularity-ce версии 3.9.5), он не может написать manifest_usage.toml (это понятно, так как в сингулярности команда выполняется пользователем и не рутом как в докере).

Вот мой Dockerfile:

FROM julia:bullseye

LABEL version=v1.6.1

RUN apt-get update && apt-get install -y git 

RUN mkdir /depot
ENV JULIA_PATH=/usr/local/julia
ENV JULIA_DEPOT_PATH=/depot
ENV JULIA_PROJECT=/whippet


RUN mkdir /whippet/ && cd /whippet && \
    git clone --depth 1 --branch v1.6.1  https://github.com/timbitz/Whippet.jl.git . && \
    julia --project=/whippet -e 'using Pkg; Pkg.instantiate(); Pkg.precompile();' 

RUN chmod 777 -R /depot/
    
ENV PATH = "/whippet/bin/:${PATH}"

RUN whippet-quant.jl -h || echo "Done"
RUN whippet-index.jl -h || echo "Done"
RUN whippet-delta.jl -h || echo "Done"


ENTRYPOINT ["whippet-quant.jl"]

Какие-либо предложения?

Я пытался использовать разные местоположения для JULIA_DEPOT_PATH (также по умолчанию ~/.julia), создавая нового пользователя, но у меня возникла та же проблема. команда

docker run cloxd/whippet:1.6.1 -h

работает хорошо, тем временем та же команда с сингулярностью вызывает следующую ошибку

singularity run  docker://cloxd/whippet:1.6.1 
INFO:    Using cached SIF image
Whippet v1.6.1 loading... 
  Activating project at `/whippet`
ERROR: LoadError: SystemError: opening file "/depot/logs/manifest_usage.toml": Read-only file system
Stacktrace:
  [1] systemerror(p::String, errno::Int32; extrainfo::Nothing)
    @ Base ./error.jl:176
  [2] #systemerror#80
    @ ./error.jl:175 [inlined]
  [3] systemerror
    @ ./error.jl:175 [inlined]
  [4] open(fname::String; lock::Bool, read::Nothing, write::Nothing, create::Nothing, truncate::Nothing, append::Bool)
    @ Base ./iostream.jl:293
  [5] open(f::Pkg.Types.var"#44#46"{String}, args::String; kwargs::Base.Pairs{Symbol, Bool, Tuple{Symbol}, NamedTuple{(:append,), Tuple{Bool}}})
    @ Base ./io.jl:382
  [6] write_env_usage(source_file::String, usage_filepath::String)
    @ Pkg.Types /usr/local/julia/share/julia/stdlib/v1.8/Pkg/src/Types.jl:487
  [7] Pkg.Types.EnvCache(env::Nothing)
    @ Pkg.Types /usr/local/julia/share/julia/stdlib/v1.8/Pkg/src/Types.jl:345
  [8] EnvCache
    @ /usr/local/julia/share/julia/stdlib/v1.8/Pkg/src/Types.jl:325 [inlined]
  [9] add_snapshot_to_undo(env::Nothing)
    @ Pkg.API /usr/local/julia/share/julia/stdlib/v1.8/Pkg/src/API.jl:1862
 [10] add_snapshot_to_undo
    @ /usr/local/julia/share/julia/stdlib/v1.8/Pkg/src/API.jl:1858 [inlined]
 [11] activate(path::String; shared::Bool, temp::Bool, io::Base.TTY)
    @ Pkg.API /usr/local/julia/share/julia/stdlib/v1.8/Pkg/src/API.jl:1700
 [12] activate(path::String)
    @ Pkg.API /usr/local/julia/share/julia/stdlib/v1.8/Pkg/src/API.jl:1659
 [13] top-level scope
    @ /whippet/bin/whippet-quant.jl:12
in expression starting at /whippet/bin/whippet-quant.jl:12

Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Kubernetes - это портативная, расширяемая платформа с открытым исходным кодом для управления контейнерными рабочими нагрузками и сервисами, которая...
Как создать PHP Image с нуля
Как создать PHP Image с нуля
Сегодня мы создадим PHP Image from Scratch для того, чтобы легко развернуть базовые PHP-приложения. Пожалуйста, имейте в виду, что это разработка для...
2
0
54
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Наконец-то я нашел работающее решение: после инициализации достаточно добавить /tmp/ в JULIA_DEPO_PATH и Джулия использует /tmp/logs/manifest_usage.toml вместо защищенного /depot/logs/manifest_usage.toml. Для ясности вот Dockerfile


FROM julia:bullseye

LABEL version=v1.6.1

RUN apt-get update && apt-get install -y git 

RUN mkdir /depot
ENV JULIA_PATH=/usr/local/julia
ENV JULIA_DEPOT_PATH=/depot
ENV JULIA_PROJECT=/whippet


RUN mkdir /whippet/ && cd /whippet && \
    git clone --depth 1 --branch v1.6.1  https://github.com/timbitz/Whippet.jl.git . && \
    julia --project=/whippet -e 'using Pkg; Pkg.instantiate(); Pkg.precompile();' 

RUN chmod 777 -R /depot/
    
ENV PATH = "/whippet/bin/:${PATH}"

RUN whippet-quant.jl -h || echo "Done"
RUN whippet-index.jl -h || echo "Done"
RUN whippet-delta.jl -h || echo "Done"

ENV JULIA_DEPOT_PATH = "/tmp/:${JULIA_DEPOT_PATH}"


ENTRYPOINT ["whippet-quant.jl"]

Другие вопросы по теме