Docker ENTRYPOINT 未按预期工作

问题描述 投票:0回答:1

我是 docker 新手,我遇到了 dockerfile 中 ENTRYPOINT 参数的问题。我正在开发一个名为 F1Tenth 的项目,我正在使用他们的预制 docker 映像。我正在 jetson nano 上运行它,我试图弄清楚如何为 ROS2 获取这两个文件(

/opt/ros/foxy/setup.bash
install/local_setup.bash
)。经过一番研究后,我认为最好的办法是运行一个获取这些资源的脚本,并使用 ENTRYPOINT 运行该脚本。我尝试了很多东西,但没有任何效果,当容器启动时,我仍然需要在终端中手动获取文件。我需要这个才能工作,因为 jetson 将连接到遥控汽车上,并且它需要无头且不需要 ssh。

这是我的entrypoint.sh(位于docker镜像目录的内部)

#!/bin/bash
source /opt/ors/foxy/setup.bash
source install/local_setup.bash
exec "$@"

这是我的 DockerFile:

FROM ros:foxy

SHELL \["/bin/bash", "-c"\]

# dependencies

RUN apt-get update --fix-missing && \
apt-get install -y git \
nano \
vim \
python3-pip \
libeigen3-dev \
tmux \
ros-foxy-rviz2
RUN apt-get -y dist-upgrade
RUN pip3 install transforms3d

# f1tenth gym

RUN git clone https://github.com/f1tenth/f1tenth_gym
RUN cd f1tenth_gym && \
pip3 install -e .

# ros2 gym bridge

RUN mkdir -p sim_ws/src/f1tenth_gym_ros
COPY . /sim_ws/src/f1tenth_gym_ros
RUN source /opt/ros/foxy/setup.bash && \
cd sim_ws/ && \
apt-get update --fix-missing && \
rosdep install -i --from-path src --rosdistro foxy -y && \
colcon build

WORKDIR '/sim_ws'
COPY entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh
ENTRYPOINT ["./entrypoint.sh"]
CMD ["/bin/bash"]

我尝试过各种其他 DockerFile 设置。也许我误解了 ENTRYPOINT 的意义

bash docker dockerfile ros ros2
1个回答
0
投票

在您的

entrypoint.sh
中,您引用了
/opt/ors/foxy/setup.bash
,但我只能在图像上找到
/opt/ros/foxy/setup.bash
(它们在路径的第二部分有所不同)。我假设这是一个拼写错误,您指的是后一个文件。这也是您在文本中提到的路径。

所以我建议按如下方式更改您的

entrypoint.sh

#!/bin/bash

source /opt/ros/foxy/setup.bash
source install/local_setup.bash

exec "$@"

我也摆弄了一点

Dockerfile
。如果您来源
SHELL
而不是
/opt/ros/foxy/setup.sh
,则无需更改
/opt/ros/foxy/setup.bash
。还把
WORKDIR
移到了更早的位置,这意味着您不需要
cd sim_ws/

您不需要进行这些更改,更新后的

entrypoint.sh
应足以使映像成功构建和运行。

FROM ros:foxy

RUN apt-get update --fix-missing && \
    apt-get install -y git \
        nano \
        vim \
        python3-pip \
        libeigen3-dev \
        tmux \
        ros-foxy-rviz2 && \
    apt-get -y dist-upgrade && \
    pip3 install transforms3d

RUN git clone https://github.com/f1tenth/f1tenth_gym
RUN cd f1tenth_gym && \
    pip3 install -e .

RUN mkdir -p sim_ws/src/f1tenth_gym_ros
COPY . /sim_ws/src/f1tenth_gym_ros

WORKDIR /sim_ws

RUN . /opt/ros/foxy/setup.sh && \
    apt-get update --fix-missing && \
    rosdep install -i --from-path src --rosdistro foxy -y && \
    colcon build

COPY entrypoint.sh .
RUN chmod +x entrypoint.sh

ENTRYPOINT ["./entrypoint.sh"]
CMD ["/bin/bash"]

我还注意到,您两次获取

/opt/ros/foxy/setup.bash
脚本,一次在
Dockerfile
本身,然后再次通过
entrypoint.sh
脚本。这是故意的吗?真的有必要吗?

© www.soinside.com 2019 - 2024. All rights reserved.