Dockerfile не запускает нужный сценарий оболочки - PullRequest
0 голосов
/ 20 января 2019

Я пытаюсь настроить и запустить определенную программу с помощью Docker. Я новичок в Docker, так что будьте осторожны с ошибками новичка!

FROM ubuntu:16.04

# create non-root user
ENV USERNAME ros
RUN adduser --ingroup sudo --disabled-password --gecos "" --shell /bin/bash --home /home/$USERNAME $USERNAME
RUN bash -c 'echo $USERNAME:ros | chpasswd'
ENV HOME /home/$USERNAME

RUN apt-get update && apt-get install --assume-yes wget sudo && \
wget https://raw.githubusercontent.com/ROBOTIS-GIT/robotis_tools/master/install_ros_kinetic.sh && \
chmod 755 ./install_ros_kinetic.sh && \
bash ./install_ros_kinetic.sh
RUN  apt-get install --assume-yes ros-kinetic-joy ros-kinetic-teleop-twist-joy ros-kinetic-teleop-twist-keyboard ros-kinetic-laser-proc ros-kinetic-rgbd-launch ros-kinetic-depthimage-to-laserscan ros-kinetic-rosserial-arduino ros-kinetic-rosserial-python ros-kinetic-rosserial-server ros-kinetic-rosserial-client ros-kinetic-rosserial-msgs ros-kinetic-amcl ros-kinetic-map-server ros-kinetic-move-base ros-kinetic-urdf ros-kinetic-xacro ros-kinetic-compressed-image-transport ros-kinetic-rqt-image-view ros-kinetic-gmapping ros-kinetic-navigation ros-kinetic-interactive-markers

RUN cd /home/$USERNAME/catkin_ws/src/
RUN git clone https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git
RUN git clone https://github.com/ROBOTIS-GIT/turtlebot3.git
USER $USERNAME
WORKDIR /home/$USERNAME

# add catkin env
RUN echo 'source /opt/ros/kinetic/setup.bash' >> /home/$USERNAME/.bashrc
RUN echo 'source /home/$USERNAME/catkin_ws/devel/setup.bash' >> /home/$USERNAME/.bashrc
RUN /bin/bash -c "source /home/ros/.bashrc && cd /home/$USERNAME/catkin_ws && catkin_make"

дал следующий вывод:

~/m/rosdocker docker build --rm -f "Dockerfile" -t rosdocker:latest .
Sending build context to Docker daemon  5.632kB
Step 1/15 : FROM ubuntu:16.04
 ---> b0ef3016420a
Step 2/15 : ENV USERNAME ros
 ---> Using cache
 ---> 25bf14574e2b
Step 3/15 : RUN adduser --ingroup sudo --disabled-password --gecos "" --shell /bin/bash --home /home/$USERNAME $USERNAME
 ---> Using cache
 ---> 3a2787196745
Step 4/15 : RUN bash -c 'echo $USERNAME:ros | chpasswd'
 ---> Using cache
 ---> fa4bc1d220a8
Step 5/15 : ENV HOME /home/$USERNAME
 ---> Using cache
 ---> f987768fa3b1
Step 6/15 : RUN apt-get update && apt-get install --assume-yes wget sudo && wget https://raw.githubusercontent.com/ROBOTIS-GIT/robotis_tools/master/install_ros_kinetic.sh && chmod 755 ./install_ros_kinetic.sh && bash ./install_ros_kinetic.sh
 ---> Using cache
 ---> 9c26b8318f2e
Step 7/15 : RUN  apt-get install --assume-yes ros-kinetic-joy ros-kinetic-teleop-twist-joy ros-kinetic-teleop-twist-keyboard ros-kinetic-laser-proc ros-kinetic-rgbd-launch ros-kinetic-depthimage-to-laserscan ros-kinetic-rosserial-arduino ros-kinetic-rosserial-python ros-kinetic-rosserial-server ros-kinetic-rosserial-client ros-kinetic-rosserial-msgs ros-kinetic-amcl ros-kinetic-map-server ros-kinetic-move-base ros-kinetic-urdf ros-kinetic-xacro ros-kinetic-compressed-image-transport ros-kinetic-rqt-image-view ros-kinetic-gmapping ros-kinetic-navigation ros-kinetic-interactive-markers
 ---> Using cache
 ---> 4b4c0abace7f
Step 8/15 : RUN cd /home/$USERNAME/catkin_ws/src/
 ---> Using cache
 ---> fb87caedbef8
Step 9/15 : RUN git clone https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git
 ---> Using cache
 ---> d2d7f198e018
Step 10/15 : RUN git clone https://github.com/ROBOTIS-GIT/turtlebot3.git
 ---> Using cache
 ---> 42ddcbbc19e1
Step 11/15 : USER $USERNAME
 ---> Using cache
 ---> 4526fd7b5d75
Step 12/15 : WORKDIR /home/$USERNAME
 ---> Using cache
 ---> 0543c327b994
Step 13/15 : RUN echo 'source /opt/ros/kinetic/setup.bash' >> /home/$USERNAME/.bashrc
 ---> Using cache
 ---> dff40263114a
Step 14/15 : RUN echo 'source /home/$USERNAME/catkin_ws/devel/setup.bash' >> /home/$USERNAME/.bashrc
 ---> Using cache
 ---> fff611e9d9db
Step 15/15 : RUN /bin/bash -c "source /home/ros/.bashrc && cd /home/$USERNAME/catkin_ws && catkin_make"
 ---> Running in 7f26a34419a3
/bin/bash: catkin_make: command not found
The command '/bin/sh -c /bin/bash -c "source /home/ros/.bashrc && cd /home/$USERNAME/catkin_ws && catkin_make"' returned a non-zero code: 127
~/m/rosdocker

Мне нужно, чтобы запустить catkin_make (который находится на пути, заданном .bashrc)

1 Ответ

0 голосов
/ 20 января 2019

Код выхода 127 из команд оболочки означает «команда не найдена». .bashrc исполняемый? Обычно это не так, , вероятно, вы хотите получить его?

source ./home/$USERNAME/.bashrc

Как указал Дэн Фаррел в своем комментарии 1012 *, использование файла в команде RUN будет действовать только в этой оболочке.

В исходный код .bashrc во время сборки

Если вы хотите, чтобы он имел эффект для последующих команд в сборке, вам нужно запустить их все в одном и том же операторе RUN. Ниже .bashrc поставляется в той же оболочке, что и catkin_make.

RUN . /home/ros/.bashrc && \ 
    cd /home/$USERNAME/catkin_ws && \
    catkin_make

Для получения файла .bashrc при запуске контейнера

Что должно произойти, когда контейнер запускается с использованием docker run, указывается с помощью оператора ENTRYPOINT. Если вы просто хотите простую подсказку bash, укажите /bin/bash. Оболочка будет запущена с пользователем, указанным в операторе USER.

Итак, если вы добавите следующее в конец вашего Dockerfile

USER ros
ENTRYPOINT /bin/bash

Когда кто-то запускает контейнер, используя docker run -it <containerName>, он попадает в оболочку bash как пользователь ros. Bash автоматически создаст файл /home/ros/.bashrc, и все определения внутри будут доступны в оболочке. (Ваш оператор RUN, содержащий файл .bashrc, может быть удален

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...