0

我正在尝试为我的 ROS 项目构建一个 Dockerfile。在 ROS 中,您需要在开始工作之前在每个终端中获取 setup bash。

(您可以通过将 source 命令放入 bashrc 文件来替换它)

所以,我要做的是在 Dockerfle 中获取文件,以便在构建容器时运行它。它在那个终端上工作正常

但是,当我打开另一个终端时,可以预见的是,该文件似乎没有来源,我必须手动进行。

有什么办法可以避免这种情况吗?

正如我以非 docker 的方式所说的那样,您将其放入一个文件中,每次打开终端时都会调用该文件,但是您如何使用 docker 执行此操作?

(换句话说,你如何确保每次执行(或附加到)docker 容器时执行 sh 文件)

4

2 回答 2

0

在 Dockerfile 中,将脚本复制到 Docker WORKDIR

COPY  ./setup.bash .

然后设置入口点以在容器启动时运行该脚本:

ENTRYPOINT ["/bin/bash", "-c", "./setup.bash"]

请注意,使用这种方法,您将无法在交互式终端中使用docker run -it. 如果这是你想要的,你需要做更多的事情。此外,这将覆盖您的原始图像ENTRYPOINT(您可以通过 找到docker image history),因此请确保这不是必需的。否则,对于这两种情况,采购脚本可能是更好的选择:

RUN source ./setup.bash
于 2020-06-28T10:42:21.927 回答
0

只需将脚本添加到 bash 中的启动配置文件中...

COPY ./setup.bash /etc/
RUN echo "source /etc/setup.bash" >> /etc/bash.bashrc
ENTRYPOINT /bin/bash

该文件/etc/bash.bashrc可能被命名/etc/bashrc,或者您可能想要使用/etc/profile.d目录,这取决于您是否希望该文件在交互式 shell 中获取。阅读有关 bash 中启动文件的相关文档。

于 2020-06-28T11:00:12.750 回答