Docker和Julia - 如何让.jl文件在容器

时间:2016-06-01 03:47:57

标签: docker julia dockerfile

我和IJulia一直在使用Julia v0.4.5一段时间了。我现在正在尝试设置一个Docker容器,我可以在其中运行我的一个.jl文件中的代码。要在容器中设置工作Julia,我已经复制了此Dockerfile中的代码:https://hub.docker.com/r/julialang/julia/~/dockerfile/

使用上面的命令我可以通过命令

从我的终端工作
docker run -i -t larajordan/juliatest:0.3

然后当容器打开时我使用命令

julia

从容器的终端打开Julia。使用Julia REPL时,我通常只执行以下命令来运行.jl文件。当我从容器内的julia REPL尝试这个时,它不起作用并给出以下错误信息。

julia> include("/home/lara/SourceCode/researchhpc/wind_spacer/julia_learning/variables.jl")
ERROR: could not open file /home/lara/SourceCode/researchhpc/wind_spacer/julia_learning/variables.jl
 in include at ./boot.jl:261
 in include_from_node1 at ./loading.jl:320

我很确定这是因为容器在内部查找.jl文件,显然该文件在容器中不存在。我试图找出如何将我的.jl文件复制到contianer但它似乎不起作用。我尝试的方法如下,从容器外部:

docker cp filename.jl /var/lib/docker/aufs/mnt/<full docker contianer id>/root/filename.jl

我收到错误

cp: cannot create regular file ‘/var/lib/docker/devicemapper/mnt/a2c36e7f6f08c345a668550974a575384b5a3d465f411d3589bd5a6ac0fad13d/rootfs/root’: No such file or directory

一旦我在容器中获得.jl文件,我认为另一件事会导致问题是.jl文件使用命令'using'。这些包不会添加到Julia中,也不会在容器中可用。我将不得不将它们添加到容器的Julia版本中。这可以从Dockerfile完成,如果我正在使用的是任何东西;似乎IJulia包是使用以下命令在Dockerfile中添加和构建的。

RUN /opt/julia/bin/julia -e 'Pkg.add("IJulia")'
RUN /opt/julia/bin/julia -e 'Pkg.build("IJulia")'

任何有关从Dockerfile中添加包以及从容器内的Julia REPL运行的.jl文件或只是从容器内的终端运行的帮助都将不胜感激。

1 个答案:

答案 0 :(得分:2)

您必须将主机目录挂载到容器https://docs.docker.com/engine/userguide/containers/dockervolumes/#mount-a-host-directory-as-a-data-volume中 尝试

docker run -it -v /home/lara/SourceCode/researchhpc/wind_spacer/julia_learning:/opt/julia_learning larajordan/juliatest:0.3 

然后在你的REPL中运行

julia> include("/opt/julia_learning/variables.jl")