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