Julia v1.0.2包装。在Docker容器问题中激活(";)

Julia v1.0.2包装。在Docker容器问题中激活(";),docker,julia,Docker,Julia,我正在为Julia项目构建Docker容器,但Pkg.activate(“.”)在使用项目的project.toml文件时遇到问题。以下是我正在做的: 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 /r

我正在为Julia项目构建Docker容器,但Pkg.activate(“.”)在使用项目的project.toml文件时遇到问题。以下是我正在做的:

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())'
当我使用上述Dockerfile代码构建容器时,我可以验证容器中是否有所有源代码和.toml文件。调用
Pkg.status()
的结果是:
status~/.julia/environments/v1.0/Project.toml

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


调用
Pkg.activate(“.”
使用我复制到
/microservice
的Project.toml,我缺少了什么?

激活的环境在会话之间不是持久的,因此您需要在每个会话中激活它。而不是使用Pkg通过
启动每个会话;Pkg.activate(“.”
您有两个更好的选项:

  • --project
    标志(记录在本页的表格中)开始,即

  • 设置
    JULIA\u项目
    environment标志()


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

    我已尝试将其添加到我的startup.jl empty!(车辆段_径)先推!(DEPOT_PATH,“./”)但是Julia向创建的项目环境添加了额外的路径,这样
    Pkg.status()
    就会产生:
    /microservice/environments/v1.0/project.toml
    选项2就完美了。。!刚刚测试,它的工作。谢谢你@fredrikekre
    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())'
    
    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())'