Docker 容器中的 Julia v1.0.2 Pkg.activate(".") 问题

Stu*_*orf 3 julia docker

我正在为一个 Julia 项目构建一个 Docker 容器,并且在使用该项目的 Project.toml 文件时遇到了 Pkg.activate(".") 问题。这是我在做什么:

FROM julia:1.0.2 AS base

ADD src/*.jl /microservice/src/

COPY Manifest.toml /microservice/Manifest.toml
COPY Project.toml /microservice/Project.toml

COPY src/startup.jl /root/.julia/config/startup.jl

WORKDIR /microservice

RUN julia -e 'cd("/microservice")'
RUN julia -e 'using Pkg; Pkg.activate(".")'
RUN julia -e 'using Pkg; Pkg.instantiate()'
RUN julia -e 'using Pkg; Pkg.status()'
RUN julia -e 'println(Base.active_project())'
Run Code Online (Sandbox Code Playgroud)

当我使用上述 Dockerfile 代码构建容器时,我可以验证所有源代码和 .toml 文件都在容器中。调用Pkg.status()结果为:Status ~/.julia/environments/v1.0/Project.toml

Base.active_project()导致: /root/.julia/environments/v1.0/Project.toml

我错过了Pkg.activate(".")使用我复制到的 Project.toml的电话/microservice吗?

fre*_*kre 6

激活的环境在 julia 会话之间不是持久的,因此您需要在每个会话中激活它。using Pkg; Pkg.activate(".")您有两个更好的选择,而不是开始每个会话:

  1. --project标志启动 julia (记录在本页https://docs.julialang.org/en/v1/manual/getting-started/#man-getting-started-1的表格中)即

    RUN julia --project=/microservice -e 'using Pkg; Pkg.instantiate()'
    RUN julia --project=/microservice -e 'using Pkg; Pkg.status()'
    RUN julia --project=/microservice -e 'println(Base.active_project())'
    
    Run Code Online (Sandbox Code Playgroud)
  2. 设置JULIA_PROJECT环境标志(https://docs.julialang.org/en/v1/manual/environment-variables/#JULIA_PROJECT-1

    ENV JULIA_PROJECT=/microservice
    RUN julia -e 'using Pkg; Pkg.instantiate()'
    RUN julia -e 'using Pkg; Pkg.status()'
    RUN julia -e 'println(Base.active_project())'
    
    Run Code Online (Sandbox Code Playgroud)

在这种情况下,我会说第二个选项更好,因为我假设您将始终在容器中使用此包环境。