docker ubuntu在开始图像

时间:2018-01-16 08:49:26

标签: docker dockerfile

我为自己建立了一个ROS形象。我在主机上安装原始主页时运行它,并获得一些技巧来获取图形。在docker中启动shell后,我总是需要执行两个源命令。其中一个要获取的文件实际上位于容器内,但另一个文件位于我的家中,只有在启动容器时才会挂载。我会自动获取这两个文件。

我尝试添加

RUN bash -c "source /opt/ros/indigo/setup.bash"

到图像文件,但实际上并没有获取它。使用CMD而不是运行没有把我放到容器的shell中(我假设它已经完成执行源然后退出了?)。我甚至不知道如何获取仅在启动后可用的文件。我需要做什么?

1 个答案:

答案 0 :(得分:1)

TL; DR:您需要在CMDENTRYPOINT中执行此步骤,对于类似源命令的内容,您需要在shell中执行此步骤以运行您的应用或者你喜欢的任何外壳。如果您只想要一个bash shell作为命令,那么将source命令放在类似.bashrc文件的内容中。或者你可以运行类似的东西:

bash -c "source /opt/ros/indigo/setup.bash && bash"

作为你的命令。

  

其中一个要获取的文件实际上位于容器内,但另一个文件位于我的家中,只有在启动容器时才会挂载。

     

...

     

我尝试将...添加到图片文件

使用临时容器构建映像,这些容器只能看到Dockerfile指令以及与之一起发送的上下文以运行构建。容器使用构建的映像和所有配置(如卷)来运行应用程序。这两个步骤之间有一个硬分隔符,即图像构建和容器运行,并且在该图像构建步骤中您的卷不可用。

为映像构建执行的每个RUN步骤都是在一个临时容器中完成的,该容器仅在文件系统完成时存储文件系统的输出。对您的环境所做的更改,CD进入另一个目录,在后台生成进程或服务,或者当RUN生成的命令退出时未写入文件系统的任何其他内容都将丢失。这是您在单个长RUN命令中看到链接在一起的命令的一个原因,这就是为什么在Dockerfile中有ENVWORKDIR命令的原因。