Dockerfile создает файл, а затем его там нет - PullRequest
0 голосов
/ 30 января 2019

Это просто кусок Dockefile, который меня смущает.Кстати, в нем есть несколько дополнительных строк отладки.В первой строке я создаю /home/ubuntu/.bashrc.Однако затем в последней строке он действует так, как будто не может его запустить.

RUN echo 'source /opt/ros/kinetic/setup.bash' >> /home/ubuntu/.bashrc
RUN echo 'source /home/ubuntu/catkin_ws/devel/setup.bash' >> /home/ubuntu/.bashrc

RUN /bin/bash -c "echo 'export HOME=/home/ubuntu' >> /root/.bashrc && source /root/.bashrc"
RUN pwd
RUN cd ~ && pwd
RUN cat /home/ubuntu/.bashrc
RUN mkdir -p ~/catkin_ws/src
RUN source /home/ubuntu/.bashrc && \
  cd ~/catkin_ws/src && \
  /opt/ros/kinetic/bin/catkin_init_workspace && \
  cd ~/catkin_ws && \
  catkin_make

Вот вывод:

Step 13/32 : RUN echo 'source /opt/ros/kinetic/setup.bash' >> /home/ubuntu/.bashrc
 ---> Using cache
 ---> a60c2d1482d8
Step 14/32 : RUN echo 'source /home/ubuntu/catkin_ws/devel/setup.bash' >> /home/ubuntu/.bashrc
 ---> Using cache
 ---> 3be964ee0c36
Step 15/32 : RUN /bin/bash -c "echo 'export HOME=/home/ubuntu' >> /root/.bashrc && source /root/.bashrc"
 ---> Using cache
 ---> 83cf2e5f4b1c
Step 16/32 : RUN pwd
 ---> Using cache
 ---> 40915ecc834d
Step 17/32 : RUN cd ~ && pwd
 ---> Using cache
 ---> 92f2cee78a48
Step 18/32 : RUN cat /home/ubuntu/.bashrc
 ---> Using cache
 ---> c8f467775b33
Step 19/32 : RUN mkdir -p ~/catkin_ws/src
 ---> Using cache
 ---> 53e5c403949f
Step 20/32 : RUN source /home/ubuntu/.bashrc &&   cd ~/catkin_ws/src &&   /opt/ros/kinetic/bin/catkin_init_workspace &&   cd ~/catkin_ws &&   catkin_make
 ---> Running in 708d485325e2
/bin/sh: 1: source: not found
The command '/bin/sh -c source /home/ubuntu/.bashrc &&   cd ~/catkin_ws/src &&   /opt/ros/kinetic/bin/catkin_init_workspace &&   cd ~/catkin_ws &&   catkin_make' returned a non-zero code: 127

Естественно, это моя ошибка, но я не вижу ее, ниразрыв в моем понимании. Спасибо!

Ответы [ 2 ]

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

Как указывает @michael_bitard, source является встроенным в bash.Оболочка по умолчанию в Ubuntu - dash, как можно увидеть здесь:

# ls -l /bin/sh
lrwxrwxrwx 1 root root 4 Jan 22 17:49 /bin/sh -> dash

Чтобы использовать bash для запуска команды, измените инструкцию RUN на

RUN cd ~/catkin_ws/src && \
  /opt/ros/kinetic/bin/catkin_init_workspace && \
  cd ~/catkin_ws && \
  /bin/bash -c "source /home/ubuntu/.bashrc; catkin_make"

Другойможно установить переменную окружения BASH_ENV, которая должна указывать указанный файл (/home/ubuntu/.bashrc) перед запуском сценария bash catkin_make, как упоминалось здесь .

ENV BASH_ENV /home/ubuntu/.bashrc
RUN cd ~/catkin_ws/src && \
  /opt/ros/kinetic/bin/catkin_init_workspace && \
  cd ~/catkin_ws && \
  /bin/bash -c "catkin_make"
0 голосов
/ 30 января 2019

source - недопустимая команда, это встроенная команда bash.

Она не сообщает вам, что файл /home/ubuntu/.bashrc, но source не является командой

Просто поставьте RUNпараметр в скрипте sh, правильно запускается с #! / bin / bash.Затем просто скопируйте sh в контейнер с помощью COPY и запустите его с RUN.

Не забудьте дать exec разрешение сценарию:

COPY script.sh /
RUN ["chmod", "+x", "/script.sh"]
RUN /script.sh

Или:

RUN /bin/bash -c "source ...."
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...