【发布时间】:2021-06-17 23:09:54
【问题描述】:
我有一个安装了 Webots 和 ROS2 的 docker 容器。但是,在容器内运行webots 会返回bash: webots: command not found。为什么?
运行 webots(但没有 ROS2)的容器
这是一个从Webots installation instructions 运行的容器,确实 成功运行了webots(但缺少我需要的 ROS2):
$ xhost +local:root > /dev/null 2>&1 #so webots won't say unable to load Qt platform plugin "xcb"
$ docker run -it -e DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix:rw cyberbotics/webots:R2021a-ubuntu20.04
不运行的容器webots
这是我的 docker 容器,它没有成功运行webots,而是显示bash: webots: command not found。但是,它确实成功运行webots_ros2 demos(我认为问题与我如何从两个容器继承有关,因为如果我交换我的两个ARG 和FROM 语句的顺序,则找到webots但ros2 不是。虽然我不确定解决方案):
Dockerfile
# inherit both the ROS2 and Webots containers
ARG BASE_IMAGE_WEBOTS=cyberbotics/webots:R2021a-ubuntu20.04
ARG IMAGE_ROS2=niurover/ros2_foxy:latest
FROM $BASE_IMAGE_WEBOTS AS base
FROM $IMAGE_ROS2 AS image_ros2
# resolve a missing dependency for webots demo
RUN apt-get update && apt-get install -y \
libxtst6 \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
# Finally open a bash command to let the user interact
CMD ["/bin/bash"]
launch.sh(用于启动 docker 容器)
#! /bin/bash
CONTAINER_USER=$USER
CONTAINER_NAME=webots_ros2_foxy
USER_ID=$UID
IMAGE=niurover/webots_ros2_foxy:latest
if [ $(uname -r | sed -n 's/.*\( *Microsoft *\).*/\1/ip') ];
then
xhost +local:$CONTAINER_USER
xhost +local:root
fi
sudo docker run -it --rm \
--name $CONTAINER_NAME \
--user=$USER_ID\
--env="DISPLAY" \
--env="CONTAINER_NAME=$CONTAINER_NAME" \
--workdir="/home/$CONTAINER_USER" \
--volume="/home/$CONTAINER_USER:/home/$CONTAINER_USER" \
--volume="/etc/group:/etc/group:ro" \
--volume="/etc/passwd:/etc/passwd:ro" \
--volume="/etc/shadow:/etc/shadow:ro" \
--volume="/etc/sudoers.d:/etc/sudoers.d:ro" \
--volume="/tmp/.X11-unix:/tmp/.X11-unix:rw" \
$IMAGE bash\
if [ $(uname -r | sed -n 's/.*\( *Microsoft *\).*/\1/ip') ];
then
xhost -local:$CONTAINER_USER
xhost -local:root
fi
总结
如您所见,两个容器都使用cyberbotics/webots:R2021a-ubuntu20.04,第二个容器使用第一个容器的所有选项,但有一些额外的选项。为什么第一个容器运行webots成功,而第二个容器找不到命令?
【问题讨论】:
-
您是否设置了
WEBOTS_HOME环境变量?您是否尝试使用/usr/local/webots/webots启动 webbot? -
@OlivierMichel
/usr/local/webots/没有这样的文件或目录,因此export WEBOTS_HOME=/usr/local/webots没有多大帮助 -
我认为这个问题与我如何从两个容器继承有关。如果我交换我的两个
ARG和FROM语句的顺序,则找到webots,但找不到ros2。我会将此信息添加到帖子中。
标签: docker dockerfile webots